Note: The material contained herein is supplementary to the article named in the title and published in the American Journal of Agricultural Economics (AJAE). This supplementary material contains the following items:

Supplemental Appendix Summary Statement

This supplemental appendix documents the exploratory data analysis process Here we explore the relationships of agricultural commodity loss, at a county level, from 2001-2015, across the three state region of the Pacific Northwest (Washington, Idaho, and Oregon), and then focus in on the 26 county region of the Inland Pacific Northwest (IPNW). We examine the entire range of commodities and damage causes for the IPNW study area, identifying the top revenue loss commodities and their most pertinent damage causes, as indicated from the USDA’s agricultural commodity loss insurance archive. We also explore claim freqency, and finally zero in on the top 5 commodities for the region, and examine specific loss and claim frequency by year and damage cause.

We perform several steps to examine the full set of data, and to narrow down factors to a usable form for further modeling analysis.

Step 1. Data Preparation: Loading and Transforming data. Here we load commodity loss data, and aggregate by differing factors, so we can examine losses on an annual basis, by county, damage cause, and commodity.

Step 2. Pacific Northwest (PNW) Overview. Here we examine overall commodity loss for the entire three state region of Washington, Idaho, and Oregon, which comes primarily from three primary agricultural regions - the IPNW (mostly Washington, with portions of northern Idaho and northeastern Oregon), the Southern Idaho Valley (Idaho), and the Willamette Valley (Oregon).

Step 3. PNW region overview of insurance loss by year, damage cause, and commodity, and county: 2001-2015

Step 4. PNW region overview of insurance Loss claim counts by year, damage cause, commodity, and county: 2001-2015

Step 5. Inland Pacific Northwest (IPNW) Overview. Given our review of insurance loss for the entire PNW - with a large proportion of loss occuring in the IPNW, were here focus on this region and more specifically examine loss and claim counts.

Step 6. IPNW region overview of Insurance Loss FREQUENCY by commodity and damage cause: 2001-2015

Step 7. IPNW region overview of Insurance Loss claim counts: 2001-2015

Step 8. WHEAT: IPNW region overview of Insurance Loss 2001-2015

Step 1: Data Preparation

The first step was to load Pacific Northwest agricultural insurance commodity loss data, aggregate by county, damage cause and commodity, remove zeros, transform the loss values ($) into cube root and logrithmic outputs, and scale and center the data.

Original data file for all insurance claims for the Pacific Northwest, can be found here:

https://github.com/erichseamon/paper-PHD1/blob/master/data/RMA_PNW_2001_2015.csv

Aggregated data file, which summarizes data by year, county, commodity, and damage cause, for just the Pacific Northwest, can be found here:

https://github.com/erichseamon/paper-PHD1/blob/master/data/RMA_damage_PNW_2001_2015.csv

All code that generates the following graphs and tables, can be found here:

https://github.com/erichseamon/paper-PHD1/


Step 1a: Original Insurance Loss Dataset - Pacific Northwest

The following table is an example of the original data that was acquired from the USDA Risk Management Agency (RMA). Each record represents an individual insurance claim.

year state county commodity damagecause monthcode month acres loss lossperacre cropyear
11338 2001 ID Ada All Other Crops Drought 9 SEP 17.000 153.00 9.000000 2001
11339 2001 ID Ada All Other Crops Heat 8 AUG 105.200 5249.00 49.895437 2001
11340 2001 ID Ada All Other Crops Freeze 4 APR 125.000 4500.00 36.000000 2001
11341 2001 ID Ada All Other Crops Wind/Excess Wind 5 MAY 50.000 1800.00 36.000000 2001
11342 2001 ID Ada All Other Crops Wind/Excess Wind 4 APR 92.500 3330.00 36.000000 2001
11343 2001 ID Bannock WHEAT Drought 8 AUG 133.000 1212.00 9.112782 2001
11344 2001 ID Bannock WHEAT Drought 9 SEP 777.520 24807.00 31.905289 2001
11345 2001 ID Bannock WHEAT Drought 7 JUL 3529.754 54726.46 15.504327 2001
11346 2001 ID Bannock WHEAT Heat 7 JUL 19.796 2371.60 119.801980 2001
11347 2001 ID Bannock WHEAT Heat 8 AUG 25.000 904.00 36.160000 2001

Step 1b: Aggregated Insurance Loss Dataset - Pacific Northwest

The following table is an example of an aggregated dataset derived from the original files. Here we have summarized claims by year, county, commodity, and damage cause. Each unique combination is summarized, which includes the total summarized loss, the number of claims, the total summarized acreage, loss per acre, loss per claim, and acres per claim. This dataset was the basis for our data examination.

year state county commodity damagecause loss count acres lossperacre lossperclaim acresperclaim
11 2014 ID Ada All Other Crops Area Plan Crops Only 1398 1 0 0.0000000 1398.0 0
12 2015 ID Ada All Other Crops Area Plan Crops Only 11810 1 0 0.0000000 11810.0 0
211 2008 OR Baker All Other Crops Area Plan Crops Only 15292 2 5482 2.7894929 7646.0 2741
212 2010 OR Baker All Other Crops Area Plan Crops Only 1819 2 2282 0.7971078 909.5 1141
215 2009 ID Bannock All Other Crops Area Plan Crops Only 2284 1 600 3.8066667 2284.0 600
245 2008 ID Bear Lake All Other Crops Area Plan Crops Only 8102 1 2468 3.2828201 8102.0 2468
246 2012 ID Bear Lake All Other Crops Area Plan Crops Only 7459 1 2468 3.0222853 7459.0 2468
291 2010 ID Bingham All Other Crops Area Plan Crops Only 4197 1 192 21.8593750 4197.0 192
292 2011 ID Bingham All Other Crops Area Plan Crops Only 7769 1 240 32.3708333 7769.0 240
293 2012 ID Bingham All Other Crops Area Plan Crops Only 6786 1 168 40.3928571 6786.0 168

Step 3: Pacific Northwest(PNW) Study Area

The following map shows the three key agricultural regions that make up over 95% of all agricultural insurance loss for the three state region of Washington, Oregon, and Idaho.



Step 4: PNW insurance claim loss summary

PNW total insurance loss by year, 2001-2015
2001-2015
damage cause loss
Drought $719,610,396
Decline in Price $336,993,981
Heat $267,376,106
Frost $170,482,583
Freeze $149,373,220
Excess Moisture/Precip/Rain $148,556,853
Hail $127,772,100
Cold Wet Weather $86,741,055
Cold Winter $67,118,523
Failure Irrig Supply $57,087,916

PNW total insurance loss by year, 2001-2015
2001-2015
commodity loss
WHEAT $1,444,149,995
CHERRIES $156,670,513
APPLES $156,063,380
POTATOES $117,459,400
BARLEY $102,125,046
DRY PEAS $58,038,162

PNW total insurance loss by year, 2001-2015
2001-2015
year loss
2001 $66,499,267
2002 $96,367,644
2003 $103,553,264
2004 $52,006,242
2005 $72,871,250
2006 $63,467,130
2007 $83,252,301
2008 $150,480,619
2009 $545,650,029
2010 $83,829,994
2011 $115,965,036
2012 $89,684,692
2013 $171,121,810
2014 $222,526,098
2015 $296,416,750


Step 4: PNW insurance claim freqency summary



Step 5: IPNW Study Area



Step 5: Principle Components Analysis (PCA)

In Step 5, we use principle components analysis to examine the variation of damage causes and commodities, across counties and years.



Step 6: IPNW insurance claim loss summary



Step 7: IPNW insurance claim loss summary

Error: First argument, `data`, must be a data frame or shared data.



STEP 8: APPLES, 2001-2015 for the IPNW



STEP 9: BARLEY, 2001-2015 for the IPNW


Error: attempt to use zero-length variable name



STEP 10: WHEAT, 2001-2015 for the IPNW



STEP 11: CHERRIES, 2001-2015 for the IPNW



STEP 12: DRY PEAS, 2001-2015 for the IPNW

LS0tCnRpdGxlOiAnU3VwcGxlbWVudGFyeSBBcHBlbmRpeDogQWdyaWN1bHR1cmFsIEluc3VyYW5jZSBBbmFseXNpcyBvZiB0aGUgUGFjaWZpYyBOb3J0aHdlc3QsCiAgMjAwMSB0byAyMDE1JwphdXRob3I6ICJFcmljaCBTZWFtb24sIFBhdWwgRS4gR2Vzc2xlciwgSm9obiBULiBBYmF0em9nbG91LCBQaGlsaXAgTW90ZSwgU3RlcGhlbiBMZWUiCmRhdGU6ICJNYXkgMjAxOSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBjc3M6IGN1c3RvbS5jc3MKICAgIHRoZW1lOiByZWFkYWJsZQogICAgdG9jOiB5ZXMKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKcGFyYW1zOgogIG91dHB1dF9kaXI6IC9kbWluZS9jb2RlL2dpdC9kbWluZS1wYXBlcjEvCm1haW5mb250OiBzZXJpZgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG91dC53aWR0aD0nOTAwcHgnLCBvdXQuaGVpZ2h0PSc3MDBweCcsIGRwaT0yMDApCgojcm1hcmtkb3duOjpyZW5kZXIoaW5wdXQgPSAiL2RtaW5lL2NvZGUvZ2l0L2RtaW5lLXBhcGVyMS9kbWluZS1taXhlZG1vZGVsLWFuYWx5c2lzX1BoYXNlMWQuUm1kIiwgb3V0cHV0X2ZpbGUgPSBwYXN0ZSgiL3RtcC9kbWluZS1taXhlZG1vZGVsLWFuYWx5c2lzX1BoYXNlMWQuaHRtbCIsIHNlcD0iIikpCgpgYGAKTm90ZTogVGhlIG1hdGVyaWFsIGNvbnRhaW5lZCBoZXJlaW4gaXMgc3VwcGxlbWVudGFyeSB0byB0aGUgYXJ0aWNsZSBuYW1lZCBpbiB0aGUgdGl0bGUgYW5kIHB1Ymxpc2hlZCBpbiB0aGUgQW1lcmljYW4gSm91cm5hbCBvZiBBZ3JpY3VsdHVyYWwgRWNvbm9taWNzIChBSkFFKS4gVGhpcyBzdXBwbGVtZW50YXJ5IG1hdGVyaWFsIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgaXRlbXM6IAoKIVtdKGh0dHBzOi8vZG1pbmUuaW8vd2FmL2ltZy9TdGVwMS5wbmcpCgoKIyMjU3VwcGxlbWVudGFsIEFwcGVuZGl4IFN1bW1hcnkgU3RhdGVtZW50CgpUaGlzIHN1cHBsZW1lbnRhbCBhcHBlbmRpeCBkb2N1bWVudHMgdGhlIGV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgcHJvY2VzcyBIZXJlIHdlIGV4cGxvcmUgdGhlIHJlbGF0aW9uc2hpcHMgb2YgYWdyaWN1bHR1cmFsIGNvbW1vZGl0eSBsb3NzLCBhdCBhIGNvdW50eSBsZXZlbCwgZnJvbSAyMDAxLTIwMTUsIGFjcm9zcyB0aGUgdGhyZWUgc3RhdGUgcmVnaW9uIG9mIHRoZSBQYWNpZmljIE5vcnRod2VzdCAoV2FzaGluZ3RvbiwgSWRhaG8sIGFuZCBPcmVnb24pLCBhbmQgdGhlbiBmb2N1cyBpbiBvbiB0aGUgMjYgY291bnR5IHJlZ2lvbiBvZiB0aGUgSW5sYW5kIFBhY2lmaWMgTm9ydGh3ZXN0IChJUE5XKS4gV2UgZXhhbWluZSB0aGUgZW50aXJlIHJhbmdlIG9mIGNvbW1vZGl0aWVzIGFuZCBkYW1hZ2UgY2F1c2VzIGZvciB0aGUgSVBOVyBzdHVkeSBhcmVhLCBpZGVudGlmeWluZyB0aGUgdG9wIHJldmVudWUgbG9zcyBjb21tb2RpdGllcyBhbmQgdGhlaXIgbW9zdCBwZXJ0aW5lbnQgZGFtYWdlIGNhdXNlcywgYXMgaW5kaWNhdGVkIGZyb20gdGhlIFVTREEncyBhZ3JpY3VsdHVyYWwgY29tbW9kaXR5IGxvc3MgaW5zdXJhbmNlIGFyY2hpdmUuICBXZSBhbHNvIGV4cGxvcmUgY2xhaW0gZnJlcWVuY3ksIGFuZCBmaW5hbGx5IHplcm8gaW4gb24gdGhlIHRvcCA1IGNvbW1vZGl0aWVzIGZvciB0aGUgcmVnaW9uLCBhbmQgZXhhbWluZSBzcGVjaWZpYyBsb3NzIGFuZCBjbGFpbSBmcmVxdWVuY3kgYnkgeWVhciBhbmQgZGFtYWdlIGNhdXNlLgoKV2UgcGVyZm9ybSBzZXZlcmFsIHN0ZXBzIHRvIGV4YW1pbmUgdGhlIGZ1bGwgc2V0IG9mIGRhdGEsIGFuZCB0byBuYXJyb3cgZG93biBmYWN0b3JzIHRvIGEgdXNhYmxlIGZvcm0gZm9yIGZ1cnRoZXIgbW9kZWxpbmcgYW5hbHlzaXMuCjxicj48L2JyPgo8YnI+PC9icj4KKipTdGVwIDEuKiogRGF0YSBQcmVwYXJhdGlvbjogTG9hZGluZyBhbmQgVHJhbnNmb3JtaW5nIGRhdGEuICBIZXJlIHdlIGxvYWQgY29tbW9kaXR5IGxvc3MgZGF0YSwgYW5kIGFnZ3JlZ2F0ZSBieSBkaWZmZXJpbmcgZmFjdG9ycywgc28gd2UgY2FuIGV4YW1pbmUgbG9zc2VzIG9uIGFuIGFubnVhbCBiYXNpcywgYnkgY291bnR5LCBkYW1hZ2UgY2F1c2UsIGFuZCBjb21tb2RpdHkuCjxicj48L2JyPgo8YnI+PC9icj4KKipTdGVwIDIuKiogUGFjaWZpYyBOb3J0aHdlc3QgKFBOVykgT3ZlcnZpZXcuICBIZXJlIHdlIGV4YW1pbmUgb3ZlcmFsbCBjb21tb2RpdHkgbG9zcyBmb3IgdGhlIGVudGlyZSB0aHJlZSBzdGF0ZSByZWdpb24gb2YgV2FzaGluZ3RvbiwgSWRhaG8sIGFuZCBPcmVnb24sIHdoaWNoIGNvbWVzIHByaW1hcmlseSBmcm9tIHRocmVlIHByaW1hcnkgYWdyaWN1bHR1cmFsIHJlZ2lvbnMgLSB0aGUgSVBOVyAobW9zdGx5IFdhc2hpbmd0b24sIHdpdGggcG9ydGlvbnMgb2Ygbm9ydGhlcm4gSWRhaG8gYW5kIG5vcnRoZWFzdGVybiBPcmVnb24pLCB0aGUgU291dGhlcm4gSWRhaG8gVmFsbGV5IChJZGFobyksIGFuZCB0aGUgV2lsbGFtZXR0ZSBWYWxsZXkgKE9yZWdvbikuCjxicj48L2JyPgo8YnI+PC9icj4KKipTdGVwIDMuKiogUE5XIHJlZ2lvbiBvdmVydmlldyBvZiBpbnN1cmFuY2UgbG9zcyBieSB5ZWFyLCBkYW1hZ2UgY2F1c2UsIGFuZCBjb21tb2RpdHksIGFuZCBjb3VudHk6IDIwMDEtMjAxNQo8YnI+PC9icj4KPGJyPjwvYnI+CioqU3RlcCA0LioqIFBOVyByZWdpb24gb3ZlcnZpZXcgb2YgaW5zdXJhbmNlIExvc3MgY2xhaW0gY291bnRzIGJ5IHllYXIsIGRhbWFnZSBjYXVzZSwgY29tbW9kaXR5LCBhbmQgY291bnR5OiAyMDAxLTIwMTUKPGJyPjwvYnI+Cjxicj48L2JyPgoqKlN0ZXAgNS4qKiBJbmxhbmQgUGFjaWZpYyBOb3J0aHdlc3QgKElQTlcpIE92ZXJ2aWV3LiAgR2l2ZW4gb3VyIHJldmlldyBvZiBpbnN1cmFuY2UgbG9zcyBmb3IgdGhlIGVudGlyZSBQTlcgLSB3aXRoIGEgbGFyZ2UgcHJvcG9ydGlvbiBvZiBsb3NzIG9jY3VyaW5nIGluIHRoZSBJUE5XLCB3ZXJlIGhlcmUgZm9jdXMgb24gdGhpcyByZWdpb24gYW5kIG1vcmUgc3BlY2lmaWNhbGx5IGV4YW1pbmUgbG9zcyBhbmQgY2xhaW0gY291bnRzLgo8YnI+PC9icj4KPGJyPjwvYnI+CioqU3RlcCA2LioqIElQTlcgcmVnaW9uIG92ZXJ2aWV3IG9mIEluc3VyYW5jZSBMb3NzIEZSRVFVRU5DWSBieSBjb21tb2RpdHkgYW5kIGRhbWFnZSBjYXVzZTogMjAwMS0yMDE1Cjxicj48L2JyPgo8YnI+PC9icj4KKipTdGVwIDcuKiogSVBOVyByZWdpb24gb3ZlcnZpZXcgb2YgSW5zdXJhbmNlIExvc3MgY2xhaW0gY291bnRzOiAyMDAxLTIwMTUKPGJyPjwvYnI+Cjxicj48L2JyPgoqKlN0ZXAgOC4qKiBXSEVBVDogSVBOVyByZWdpb24gb3ZlcnZpZXcgb2YgSW5zdXJhbmNlIExvc3MgMjAwMS0yMDE1CgoKIVtdKGh0dHBzOi8vZG1pbmUuaW8vd2FmL2ltZy9TdGVwMS5wbmcpCgoKIyNTdGVwIDE6IERhdGEgUHJlcGFyYXRpb24KClRoZSBmaXJzdCBzdGVwIHdhcyB0byBsb2FkIFBhY2lmaWMgTm9ydGh3ZXN0IGFncmljdWx0dXJhbCBpbnN1cmFuY2UgY29tbW9kaXR5IGxvc3MgZGF0YSwgYWdncmVnYXRlIGJ5IGNvdW50eSwgZGFtYWdlIGNhdXNlIGFuZCBjb21tb2RpdHksIHJlbW92ZSB6ZXJvcywgdHJhbnNmb3JtIHRoZSBsb3NzIHZhbHVlcyAoJCkgaW50byBjdWJlIHJvb3QgYW5kIGxvZ3JpdGhtaWMgb3V0cHV0cywgYW5kIHNjYWxlIGFuZCBjZW50ZXIgdGhlIGRhdGEuICAKCk9yaWdpbmFsIGRhdGEgZmlsZSBmb3IgYWxsIGluc3VyYW5jZSBjbGFpbXMgZm9yIHRoZSBQYWNpZmljIE5vcnRod2VzdCwgY2FuIGJlIGZvdW5kIGhlcmU6CgpodHRwczovL2dpdGh1Yi5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9ibG9iL21hc3Rlci9kYXRhL1JNQV9QTldfMjAwMV8yMDE1LmNzdgoKQWdncmVnYXRlZCBkYXRhIGZpbGUsIHdoaWNoIHN1bW1hcml6ZXMgZGF0YSBieSB5ZWFyLCBjb3VudHksIGNvbW1vZGl0eSwgYW5kIGRhbWFnZSBjYXVzZSwgZm9yIGp1c3QgdGhlIFBhY2lmaWMgTm9ydGh3ZXN0LCBjYW4gYmUgZm91bmQgaGVyZToKCmh0dHBzOi8vZ2l0aHViLmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL2Jsb2IvbWFzdGVyL2RhdGEvUk1BX2RhbWFnZV9QTldfMjAwMV8yMDE1LmNzdgoKQWxsIGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyBncmFwaHMgYW5kIHRhYmxlcywgY2FuIGJlIGZvdW5kIGhlcmU6CgpodHRwczovL2dpdGh1Yi5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS8KCgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0KCmxpYnJhcnkodGFiKQpsaWJyYXJ5KGNhcikKbGlicmFyeShSQ3VybCkKbGlicmFyeShsbWU0KQpsaWJyYXJ5KGV6KQpsaWJyYXJ5KGxhdHRpY2UpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShjb2VmcGxvdDIpCmxpYnJhcnkoYnJvb20pCmxpYnJhcnkoaHRtbFRhYmxlKQpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeShrYWJsZUV4dHJhKQoKI29wdGlvbnMoc2NpcGVuPTk5OSkKCiNsb2FkIG9yaWdpbmFsIGRhdGEgYXMgdHh0IGZpbGUKCnJtYTE5ODggPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzE5ODgudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQpybWExOTg5IDwtIHJlYWQuY3N2KCIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X3R4dC8xOTg5LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKcm1hMTk5MCA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQS9jcm9wX2luZGVtbml0eV90eHQvMTk5MC50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCnJtYTE5OTEgPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzE5OTEudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQpybWExOTkyIDwtIHJlYWQuY3N2KCIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X3R4dC8xOTkyLnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKcm1hMTk5MyA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQS9jcm9wX2luZGVtbml0eV90eHQvMTk5My50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCnJtYTE5OTQgPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzE5OTQudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQpybWExOTk1IDwtIHJlYWQuY3N2KCIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X3R4dC8xOTk1LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKcm1hMTk5NiA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQS9jcm9wX2luZGVtbml0eV90eHQvMTk5Ni50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCnJtYTE5OTcgPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzE5OTcudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQpybWExOTk4IDwtIHJlYWQuY3N2KCIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X3R4dC8xOTk4LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKcm1hMTk5OSA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQS9jcm9wX2luZGVtbml0eV90eHQvMTk5OS50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCnJtYTIwMDAgPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzIwMDAudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQpybWEyMDAxIDwtIHJlYWQuY3N2KCIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X3R4dC8yMDAxLnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKcm1hMjAwMiA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQS9jcm9wX2luZGVtbml0eV90eHQvMjAwMi50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCnJtYTIwMDMgPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzIwMDMudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQpybWEyMDA0IDwtIHJlYWQuY3N2KCIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X3R4dC8yMDA0LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKcm1hMjAwNSA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQS9jcm9wX2luZGVtbml0eV90eHQvMjAwNS50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCnJtYTIwMDYgPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzIwMDYudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQpybWEyMDA3IDwtIHJlYWQuY3N2KCIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X3R4dC8yMDA3LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKcm1hMjAwOCA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQS9jcm9wX2luZGVtbml0eV90eHQvMjAwOC50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCnJtYTIwMDkgPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzIwMDkudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQpybWEyMDEwIDwtIHJlYWQuY3N2KCIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X3R4dC8yMDEwLnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKcm1hMjAxMSA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQS9jcm9wX2luZGVtbml0eV90eHQvMjAxMS50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCnJtYTIwMTIgPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzIwMTIudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQpybWEyMDEzIDwtIHJlYWQuY3N2KCIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X3R4dC8yMDEzLnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKcm1hMjAxNCA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQS9jcm9wX2luZGVtbml0eV90eHQvMjAxNC50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCnJtYTIwMTUgPC0gcmVhZC5jc3YoIi9kbWluZS9kYXRhL1VTREEvY3JvcF9pbmRlbW5pdHlfdHh0LzIwMTUudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQoKI2xvYWQgb3JpZ2luYWwgZGF0YSBhcyBmcm9tIGdpdGh1YgoKI3JtYTE5ODggPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzE5ODgudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQojcm1hMTk4OSA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL3BhcGVyLVBIRDEvbWFzdGVyL2RhdGEvMTk4OS50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCiNybWExOTkwIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9tYXN0ZXIvZGF0YS8xOTkwLnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKI3JtYTE5OTEgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzE5OTEudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQojcm1hMTk5MiA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL3BhcGVyLVBIRDEvbWFzdGVyL2RhdGEvMTk5Mi50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCiNybWExOTkzIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9tYXN0ZXIvZGF0YS8xOTkzLnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKI3JtYTE5OTQgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzE5OTQudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQojcm1hMTk5NSA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL3BhcGVyLVBIRDEvbWFzdGVyL2RhdGEvMTk5NS50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCiNybWExOTk2IDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9tYXN0ZXIvZGF0YS8xOTk2LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKI3JtYTE5OTcgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzE5OTcudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQojcm1hMTk5OCA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL3BhcGVyLVBIRDEvbWFzdGVyL2RhdGEvMTk5OC50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCiNybWExOTk5IDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9tYXN0ZXIvZGF0YS8xOTk5LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKI3JtYTIwMDAgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzIwMDAudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQojcm1hMjAwMSA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL3BhcGVyLVBIRDEvbWFzdGVyL2RhdGEvMjAwMS50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCiNybWEyMDAyIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9tYXN0ZXIvZGF0YS8yMDAyLnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKI3JtYTIwMDMgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzIwMDMudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQojcm1hMjAwNCA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL3BhcGVyLVBIRDEvbWFzdGVyL2RhdGEvMjAwNC50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCiNybWEyMDA1IDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9tYXN0ZXIvZGF0YS8yMDA1LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKI3JtYTIwMDYgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzIwMDYudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQojcm1hMjAwNyA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL3BhcGVyLVBIRDEvbWFzdGVyL2RhdGEvMjAwNy50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCiNybWEyMDA4IDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9tYXN0ZXIvZGF0YS8yMDA4LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKI3JtYTIwMDkgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzIwMDkudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQojcm1hMjAxMCA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL3BhcGVyLVBIRDEvbWFzdGVyL2RhdGEvMjAxMC50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCiNybWEyMDExIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9tYXN0ZXIvZGF0YS8yMDExLnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKI3JtYTIwMTIgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzIwMTIudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQojcm1hMjAxMyA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL3BhcGVyLVBIRDEvbWFzdGVyL2RhdGEvMjAxMy50eHQiLCBzZXAgPSAifCIsIGhlYWRlciA9IEZBTFNFLCBzdHJpcC53aGl0ZSA9IFRSVUUpCiNybWEyMDE0IDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vcGFwZXItUEhEMS9tYXN0ZXIvZGF0YS8yMDE0LnR4dCIsIHNlcCA9ICJ8IiwgaGVhZGVyID0gRkFMU0UsIHN0cmlwLndoaXRlID0gVFJVRSkKI3JtYTIwMTUgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcmljaHNlYW1vbi9wYXBlci1QSEQxL21hc3Rlci9kYXRhLzIwMTUudHh0Iiwgc2VwID0gInwiLCBoZWFkZXIgPSBGQUxTRSwgc3RyaXAud2hpdGUgPSBUUlVFKQoKUk1BXzE5ODkgPC0gcmJpbmQocm1hMTk4OSwgcm1hMTk5MCwgcm1hMTk5MSwgcm1hMTk5Miwgcm1hMTk5Mywgcm1hMTk5NCwgcm1hMTk5NSwgcm1hMTk5Niwgcm1hMTk5Nywgcm1hMTk5OCwgcm1hMTk5OSwgcm1hMjAwMCkKClJNQV8xOTg5IDwtIGRhdGEuZnJhbWUoUk1BXzE5ODlbLDFdLCBSTUFfMTk4OVssM10sIFJNQV8xOTg5Wyw1XSwgUk1BXzE5ODlbLDddLCBSTUFfMTk4OVssMTJdLCBSTUFfMTk4OVssMTNdLCBSTUFfMTk4OVssMTRdLCBSTUFfMTk4OVssMTVdKQoKY29sbmFtZXMoUk1BXzE5ODkpIDwtIGMoInllYXIiLCAic3RhdGUiLCAiY291bnR5IiwgImNvbW1vZGl0eSIsICJkYW1hZ2VjYXVzZSIsICJtb250aGNvZGUiLCAibW9udGgiLCAibG9zcyIpCiN3cml0ZS5jc3YoUk1BXzE5ODksIGZpbGUgPSAiL2RtaW5lL2NvZGUvZ2l0L3BhcGVyLVBIRDEvZGF0YS9STUFfYWdncmVnYXRlZGNzdi9VU19STUFfMTk4OV8yMDAwLmNzdiIpCiNzYXZlKFJNQV8xOTg5LGZpbGU9Ii9kbWluZS9jb2RlL2dpdC9wYXBlci1QSEQxL2RhdGEvUk1BX1JkYS9VU19STUFfMTk4OV8yMDAwLlJkYSIpCgpSTUEgPC0gcmJpbmQocm1hMjAwMSwgcm1hMjAwMiwgcm1hMjAwMywgcm1hMjAwNCwgcm1hMjAwNSwgcm1hMjAwNiwgcm1hMjAwNywgcm1hMjAwOCwgcm1hMjAwOSwgcm1hMjAxMCwgcm1hMjAxMSwgcm1hMjAxMiwgcm1hMjAxMywgcm1hMjAxNCwgcm1hMjAxNSkKClJNQSA8LSBkYXRhLmZyYW1lKFJNQVssMV0sIFJNQVssM10sIFJNQVssNV0sIFJNQVssN10sIFJNQVssMTJdLCBSTUFbLDEzXSwgUk1BWywxNF0sIFJNQVssMTVdLCBSTUFbLDE2XSkKCmNvbG5hbWVzKFJNQSkgPC0gYygieWVhciIsICJzdGF0ZSIsICJjb3VudHkiLCAiY29tbW9kaXR5IiwgImRhbWFnZWNhdXNlIiwgIm1vbnRoY29kZSIsICJtb250aCIsICJhY3JlcyIsICJsb3NzIikKI3dyaXRlLmNzdihSTUEsIGZpbGUgPSAiL2RtaW5lL2NvZGUvZ2l0L3BhcGVyLVBIRDEvZGF0YS9STUFfYWdncmVnYXRlZGNzdi9VU19STUFfMjAwMV8yMDE1LmNzdiIpCiNzYXZlKFJNQSxmaWxlPSIvZG1pbmUvY29kZS9naXQvcGFwZXItUEhEMS9kYXRhL1JNQV9SZGEvVVNfUk1BXzIwMDFfMjAxNS5SZGEiKQoKClJNQV9QTlcgPC0gc3Vic2V0KFJNQSwgc3RhdGUgPT0gIldBIiB8IHN0YXRlID09ICJPUiIgfCBzdGF0ZSA9PSAiSUQiICkKI3NhdmUoUk1BX1BOVyxmaWxlPSIvZG1pbmUvY29kZS9naXQvcGFwZXItUEhEMS9kYXRhL1JNQV9SZGEvUE5XX1JNQV8yMDAxXzIwMTUuUmRhIikKClJNQV9QTldfMTk4OSA8LSBzdWJzZXQoUk1BXzE5ODksIHN0YXRlID09ICJXQSIgfCBzdGF0ZSA9PSAiT1IiIHwgc3RhdGUgPT0gIklEIiApCiNzYXZlKFJNQV9QTldfMTk4OSxmaWxlPSIvZG1pbmUvY29kZS9naXQvcGFwZXItUEhEMS9kYXRhL1JNQV9SZGEvUE5XX1JNQV8xOTg5XzIwMDAuUmRhIikKCgpSTUFfUE5XJGxvc3NwZXJhY3JlIDwtIFJNQV9QTlckbG9zcyAvIFJNQV9QTlckYWNyZXMKClJNQV9QTlcgPC0gc3Vic2V0KFJNQV9QTlcsIG1vbnRoICE9ICIiKQoKUk1BX1BOVyRjcm9weWVhciA8LSBSTUFfUE5XJHllYXIKClJNQV9QTlckY3JvcHllYXJbUk1BX1BOVyRtb250aGNvZGUgPj0gMTBdIDwtIFJNQV9QTlckeWVhciArIDEKClJNQV9QTlcgPC0gc3Vic2V0KFJNQV9QTlcsIHllYXIgIT0gMjAxNikKCgoKUk1BX2NvbW1vZGl0eV9sb3NzIDwtIGFnZ3JlZ2F0ZShSTUEkbG9zcywgYnkgPSBsaXN0KFJNQSR5ZWFyLCBSTUEkc3RhdGUsIFJNQSRjb3VudHksIFJNQSRjb21tb2RpdHkpLCBGVU4gPSBzdW0pCmNvbG5hbWVzKFJNQV9jb21tb2RpdHlfbG9zcykgPC0gYygieWVhciIsICJzdGF0ZSIsICJjb3VudHkiLCAiY29tbW9kaXR5IiwgImxvc3MiKQpSTUFfY29tbW9kaXR5X2xvc3MgPC0gc3Vic2V0KFJNQV9jb21tb2RpdHlfbG9zcywgY29tbW9kaXR5ICE9ICJBREpVU1RFRCBHUk9TUyBSRVZFTlVFIikKClJNQV9jb21tb2RpdHlfY291bnQgPC0gYWdncmVnYXRlKFJNQSRsb3NzLCBieSA9IGxpc3QoUk1BJHllYXIsIFJNQSRzdGF0ZSwgUk1BJGNvdW50eSwgUk1BJGNvbW1vZGl0eSksIEZVTiA9IGxlbmd0aCkKY29sbmFtZXMoUk1BX2NvbW1vZGl0eV9jb3VudCkgPC0gYygieWVhciIsICJzdGF0ZSIsICJjb3VudHkiLCAiY29tbW9kaXR5IiwgImNvdW50IikKUk1BX2NvbW1vZGl0eV9jb3VudCA8LSBzdWJzZXQoUk1BX2NvbW1vZGl0eV9jb3VudCwgY29tbW9kaXR5ICE9ICJBREpVU1RFRCBHUk9TUyBSRVZFTlVFIikKCgpSTUFfY29tbW9kaXR5X2FjcmVzIDwtIGFnZ3JlZ2F0ZShSTUEkYWNyZXMsIGJ5ID0gbGlzdChSTUEkeWVhciwgUk1BJHN0YXRlLCBSTUEkY291bnR5LCBSTUEkY29tbW9kaXR5KSwgRlVOID0gc3VtKQpjb2xuYW1lcyhSTUFfY29tbW9kaXR5X2FjcmVzKSA8LSBjKCJ5ZWFyIiwgInN0YXRlIiwgImNvdW50eSIsICJjb21tb2RpdHkiLCAiYWNyZXMiKQpSTUFfY29tbW9kaXR5X2FjcmVzIDwtIHN1YnNldChSTUFfY29tbW9kaXR5X2FjcmVzLCBjb21tb2RpdHkgIT0gIkFESlVTVEVEIEdST1NTIFJFVkVOVUUiKQoKClJNQV9kYW1hZ2VfbG9zcyA8LSBhZ2dyZWdhdGUoUk1BJGxvc3MsIGJ5ID0gbGlzdChSTUEkeWVhciwgUk1BJHN0YXRlLCBSTUEkY291bnR5LCBSTUEkY29tbW9kaXR5LCBSTUEkZGFtYWdlY2F1c2UpLCBGVU4gPSBzdW0pCmNvbG5hbWVzKFJNQV9kYW1hZ2VfbG9zcykgPC0gYygieWVhciIsICJzdGF0ZSIsICJjb3VudHkiLCAiY29tbW9kaXR5IiwgImRhbWFnZWNhdXNlIiwgImxvc3MiKQoKClJNQV9kYW1hZ2VfY291bnQgPC0gYWdncmVnYXRlKFJNQSRsb3NzLCBieSA9IGxpc3QoUk1BJHllYXIsIFJNQSRzdGF0ZSwgUk1BJGNvdW50eSwgUk1BJGNvbW1vZGl0eSwgUk1BJGRhbWFnZWNhdXNlKSwgRlVOID0gbGVuZ3RoKQpjb2xuYW1lcyhSTUFfZGFtYWdlX2NvdW50KSA8LSBjKCJ5ZWFyIiwgInN0YXRlIiwgImNvdW50eSIsICJjb21tb2RpdHkiLCAiZGFtYWdlY2F1c2UiLCAiY291bnQiKQoKClJNQV9kYW1hZ2VfYWNyZXMgPC0gYWdncmVnYXRlKFJNQSRhY3JlcywgYnkgPSBsaXN0KFJNQSR5ZWFyLCBSTUEkc3RhdGUsIFJNQSRjb3VudHksIFJNQSRjb21tb2RpdHksIFJNQSRkYW1hZ2VjYXVzZSksIEZVTiA9IHN1bSkKY29sbmFtZXMoUk1BX2RhbWFnZV9hY3JlcykgPC0gYygieWVhciIsICJzdGF0ZSIsICJjb3VudHkiLCAiY29tbW9kaXR5IiwgImRhbWFlY2F1c2UiLCAiYWNyZXMiKQoKClJNQV9jb21tb2RpdHlfY29tYmluZWQgPC0gY2JpbmQoUk1BX2NvbW1vZGl0eV9sb3NzLCBSTUFfY29tbW9kaXR5X2NvdW50JGNvdW50LCBSTUFfY29tbW9kaXR5X2FjcmVzJGFjcmVzKQpjb2xuYW1lcyhSTUFfY29tbW9kaXR5X2NvbWJpbmVkKSA8LSBjKCJ5ZWFyIiwgInN0YXRlIiwgImNvdW50eSIsICJjb21tb2RpdHkiLCAibG9zcyIsICJjb3VudCIsICJhY3JlcyIpCgpSTUFfY29tbW9kaXR5X2NvbWJpbmVkJGxvc3NwZXJhY3JlIDwtIFJNQV9jb21tb2RpdHlfY29tYmluZWQkbG9zcyAvIFJNQV9jb21tb2RpdHlfY29tYmluZWQkYWNyZXMKUk1BX2NvbW1vZGl0eV9jb21iaW5lZCRsb3NzcGVyY2xhaW0gPC0gUk1BX2NvbW1vZGl0eV9jb21iaW5lZCRsb3NzIC8gUk1BX2NvbW1vZGl0eV9jb21iaW5lZCRjb3VudApSTUFfY29tbW9kaXR5X2NvbWJpbmVkJGFjcmVzcGVyY2xhaW0gPC0gUk1BX2NvbW1vZGl0eV9jb21iaW5lZCRhY3JlcyAvIFJNQV9jb21tb2RpdHlfY29tYmluZWQkY291bnQKCgpSTUFfZGFtYWdlX2NvbWJpbmVkIDwtIGNiaW5kKFJNQV9kYW1hZ2VfbG9zcywgUk1BX2RhbWFnZV9jb3VudCRjb3VudCwgUk1BX2RhbWFnZV9hY3JlcyRhY3JlcykKY29sbmFtZXMoUk1BX2RhbWFnZV9jb21iaW5lZCkgPC0gYygieWVhciIsICJzdGF0ZSIsICJjb3VudHkiLCAiY29tbW9kaXR5IiwgImRhbWFnZWNhdXNlIiwgImxvc3MiLCAiY291bnQiLCAiYWNyZXMiKQpSTUFfZGFtYWdlX2NvbWJpbmVkJGxvc3NwZXJhY3JlIDwtIFJNQV9kYW1hZ2VfY29tYmluZWQkbG9zcyAvIFJNQV9kYW1hZ2VfY29tYmluZWQkYWNyZXMKUk1BX2RhbWFnZV9jb21iaW5lZCRsb3NzcGVyY2xhaW0gPC0gUk1BX2RhbWFnZV9jb21iaW5lZCRsb3NzIC8gUk1BX2RhbWFnZV9jb21iaW5lZCRjb3VudApSTUFfZGFtYWdlX2NvbWJpbmVkJGFjcmVzcGVyY2xhaW0gPC0gUk1BX2RhbWFnZV9jb21iaW5lZCRhY3JlcyAvIFJNQV9kYW1hZ2VfY29tYmluZWQkY291bnQKCgpSTUFfZGFtYWdlX2NvbWJpbmVkJGxvc3NwZXJhY3JlWyFpcy5maW5pdGUoUk1BX2RhbWFnZV9jb21iaW5lZCRsb3NzcGVyYWNyZSldIDwtIDAKI3dyaXRlLmNzdihSTUFfY29tbW9kaXR5X2NvbWJpbmVkLCBmaWxlID0gcGFzdGUoIi9uZnMvc29pbHNlc2ZlZWRiYWNrLWRhdGEvZGF0YS9STUEvUk1BX2NvbW1vZGl0eV9jb21iaW5lZC5jc3YiLCBzZXA9IiIpKQojd3JpdGUuY3N2KFJNQV9kYW1hZ2VfY29tYmluZWQsIGZpbGUgPSBwYXN0ZSgiL25mcy9zb2lsc2VzZmVlZGJhY2stZGF0YS9kYXRhL1JNQS9STUFfZGFtYWdlX2NvbWJpbmVkLmNzdiIsIHNlcD0iIikpCgojc3Vic2V0IGZvciBQTlcgLSAyMDAxIC0gMjAxNQpSTUFfZGFtYWdlX1BOVyA8LSBzdWJzZXQoUk1BX2RhbWFnZV9jb21iaW5lZCwgc3RhdGUgPT0gIldBIiB8IHN0YXRlID09ICJPUiIgfCBzdGF0ZSA9PSAiSUQiKQoKUk1BX2RhbWFnZV9QTlcgPC0gc3Vic2V0KFJNQV9kYW1hZ2VfUE5XLCBjb3VudHkgIT0gIkFsbCBPdGhlciBDb3VudGllcyIpCndyaXRlLmNzdihSTUFfZGFtYWdlX1BOVywgZmlsZSA9ICIvZG1pbmUvZGF0YS9VU0RBL2Nyb3BfaW5kZW1uaXR5X1BOVy9STUFfZGFtYWdlX1BOV18yMDAxXzIwMTUuY3N2IikKClJNQV9JZGFobyA8LSBzdWJzZXQoUk1BX2RhbWFnZV9QTlcsIHN0YXRlID09ICJJRCIpClJNQV9PcmVnb24gPC0gc3Vic2V0KFJNQV9kYW1hZ2VfUE5XLCBzdGF0ZSA9PSAiT1IiKQpSTUFfV2FzaGluZ3RvbiA8LSBzdWJzZXQoUk1BX2RhbWFnZV9QTlcsIHN0YXRlID09ICJXQSIpCgpSTUFfSWRhaG9fSVBOVyA8LSBzdWJzZXQoUk1BX0lkYWhvLCBjb3VudHkgPT0gIklkYWhvIiB8IGNvdW50eSA9PSAiTGV3aXMiIHwgY291bnR5ID09ICAiTmV6IFBlcmNlIiB8IGNvdW50eSA9PSAgIkxhdGFoIiB8IGNvdW50eSA9PSAgIkJlbmV3YWgiKQpSTUFfT3JlZ29uX0lQTlcgPC0gc3Vic2V0KFJNQV9PcmVnb24sIGNvdW50eSA9PSAiV2FzY28iIHwgY291bnR5ID09ICAiU2hlcm1hbiIgfCBjb3VudHkgPT0gICJHaWxsaWFtIiB8IGNvdW50eSA9PSAgIk1vcnJvdyIgfCBjb3VudHkgPT0gICJVbWF0aWxsYSIgfCBjb3VudHkgPT0gICJVbmlvbiIgfCBjb3VudHkgPT0gICJXYWxsb3dhIikKUk1BX1dhc2hpbmd0b25fSVBOVyA8LSBzdWJzZXQoUk1BX1dhc2hpbmd0b24sIGNvdW50eSA9PSAgIkRvdWdsYXMiIHwgY291bnR5ID09ICAiR3JhbnQiIHwgY291bnR5ID09ICAiQmVudG9uIiB8IGNvdW50eSA9PSAgIkZyYW5rbGluIiB8IGNvdW50eSA9PSAgIldhbGxhIFdhbGxhIiB8IGNvdW50eSA9PSAgIkFkYW1zIiB8IGNvdW50eSA9PSAgIkxpbmNvbG4iIHwgY291bnR5ID09ICAiU3Bva2FuZSIgfCBjb3VudHkgPT0gICJXaGl0bWFuIiB8IGNvdW50eSA9PSAgIkNvbHVtYmlhIiB8IGNvdW50eSA9PSAgIkdhcmZpZWxkIiB8IGNvdW50eSA9PSAgIkFzb3RpbiIpCgpSTUFfZGFtYWdlX0lQTlcgPC0gcmJpbmQoUk1BX0lkYWhvX0lQTlcsUk1BX09yZWdvbl9JUE5XLFJNQV9XYXNoaW5ndG9uX0lQTlcpCgojLWxvYWQgc3VtbWFyaXplZCBkYXRhClNvdXRoZXJuX0lEX3N1bWxvc3MgPC0gcmVhZC5jc3YodGV4dD1nZXRVUkwKKCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXJpY2hzZWFtb24vZG1pbmVfYW5vdmEvbWFzdGVyL1BOV19zdW1tYXJ5X2FsbC5jc3YiKSwgCmhlYWRlciA9IFRSVUUpCgpTb3V0aGVybl9JRF9zdW1sb3NzX2FsbF9zdW0gPC0gUk1BX2RhbWFnZV9QTlcKClNvdXRoZXJuX0lEX3N1bWxvc3NfYWxsX3N1bSAgPC0gYWdncmVnYXRlKGxvc3MgfiB5ZWFyICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFtYWdlY2F1c2UgKyBzdGF0ZSArIGNvdW50eSArIGNvbW1vZGl0eSwgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXRoZXJuX0lEX3N1bWxvc3MsIHN1bSkKClNvdXRoZXJuX0lEX2NvdW50X2FsbF9jb3VudCAgPC0gYWdncmVnYXRlKGNvdW50IH4geWVhciArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbWFnZWNhdXNlICsgY291bnR5ICsgY29tbW9kaXR5LCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXRoZXJuX0lEX3N1bWxvc3MsIHN1bSkKU291dGhlcm5fSURfc3VtbG9zc19hbGxfc3VtIDwtIAogIFNvdXRoZXJuX0lEX3N1bWxvc3NfYWxsX3N1bVtTb3V0aGVybl9JRF9zdW1sb3NzX2FsbF9zdW0kbG9zcyA+PSAxLCBdCgojLS0tc3Vic2V0dGluZyBmb3IgcGFsb3VzZS9JUE5XIGZvciBzdW0sIGNvdW50LCBhbmQgbG9zc3BlcmFjcmUKCiMtIFNVTTogc3VtbG9zc19wYWxvdXNlX3N1bQojLSBDT1VOVDogY291bnRfcGFsb3VzZV9jb3VudAojLSBMT1NTUEVSQUNSRTogcGFsb3VzZV9sb3NzcGVyYWNyZXMKCiBwYWxvdXNlY291bnRpZXMgICAgPC0gIGMoIklkYWhvIiwgIkxld2lzIiwgIk5leiBQZXJjZSIsICJDbGVhcndhdGVyIiwgIkxhdGFoIiwgIkJlbmV3YWgiLCAiS29vdGVuYWkiLCJEb3VnbGFzIiwgIkdyYW50IiwgIkJlbnRvbiIsICJGcmFua2xpbiIsICJXYWxsYSBXYWxsYSIsICJBZGFtcyIsICJMaW5jb2xuIiwgIlNwb2thbmUiLCAiV2hpdG1hbiIsICJDb2x1bWJpYSIsICJHYXJmaWVsZCIsICJBc290aW4iLCJXYXNjbyIsICJTaGVybWFuIiwgIkdpbGxpYW0iLCAiTW9ycm93IiwgIlVtYXRpbGxhIiwgIlVuaW9uIiwgIldhbGxvd2EiKQoKc3VtbG9zc19wYWxvdXNlIDwtIFNvdXRoZXJuX0lEX3N1bWxvc3NbU291dGhlcm5fSURfc3VtbG9zcyRjb3VudHkgJWluJSBwYWxvdXNlY291bnRpZXMsIF0Kc3VtbG9zc19ub25wYWxvdXNlIDwtIFNvdXRoZXJuX0lEX3N1bWxvc3NbIVNvdXRoZXJuX0lEX3N1bWxvc3MkY291bnR5ICVpbiUgcGFsb3VzZWNvdW50aWVzLCBdCiAgICAgICAgICAgICAgICAgICAgICAKCnN1bWxvc3NfcGFsb3VzZV9zdW0gIDwtIGFnZ3JlZ2F0ZShsb3NzIH4geWVhciArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbWFnZWNhdXNlICsgY291bnR5ICsgc3RhdGUgKyBjb21tb2RpdHksICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbG9zc19wYWxvdXNlLCBzdW0pCmNvdW50X3BhbG91c2VfY291bnQgIDwtIGFnZ3JlZ2F0ZShjb3VudCB+IHllYXIgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW1hZ2VjYXVzZSArIGNvdW50eSArIHN0YXRlICsgY29tbW9kaXR5LCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bWxvc3NfcGFsb3VzZSwgc3VtKQoKcGFsb3VzZV9sb3NzcGVyYWNyZXMgIDwtIGFnZ3JlZ2F0ZShsb3NzcGVyYWNyZXMgfiB5ZWFyICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFtYWdlY2F1c2UgKyBjb3VudHkgKyBzdGF0ZSArIGNvbW1vZGl0eSwgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1sb3NzX3BhbG91c2UsIG1lYW4pCnN1bWxvc3NfcGFsb3VzZV9zdW0gPC0gCiAgc3VtbG9zc19wYWxvdXNlX3N1bVtzdW1sb3NzX3BhbG91c2Vfc3VtJGxvc3MgPj0gMSwgXQoKCiNjcmVhdGluZyB0cmFuc2Zvcm1zIGZvciBzdW0gbG9zcyAtIGN1YmUgcm9vdCwgc3F1YXJlIHJvb3QsIGludmVyc2UsIGxvZzEwIGFuZCBuYXR1cmFsIGxvZywgYW5kIHRoZW4gc2NhbGUgYW5kIGNlbnRlcgoKTWF0aC5jYnJ0IDwtIGZ1bmN0aW9uKHgpIHsKICBzaWduKHgpICogYWJzKHgpXigxLzMpCn0KCiMtY2FsY3VsYXRlIGN1YmUgbG9zcwpzdW1sb3NzX3BhbG91c2Vfc3VtJGN1YmVfbG9zcyA8LSBNYXRoLmNicnQoc3VtbG9zc19wYWxvdXNlX3N1bSRsb3NzKQoKIy1yZW1vdmUgemVyb3MKc3VtbG9zc19wYWxvdXNlX3N1bSA8LSBzdWJzZXQoc3VtbG9zc19wYWxvdXNlX3N1bSwgbG9zcyA+IDApCgojLXVzZSBhIGxvZyB0cmFuc2Zvcm0gCgpzdW1sb3NzX3BhbG91c2Vfc3VtJGxvZzEwX2xvc3MgPC0gbG9nMTAoc3VtbG9zc19wYWxvdXNlX3N1bSRsb3NzKQpzdW1sb3NzX3BhbG91c2Vfc3VtJGxvZ19sb3NzIDwtIGxvZyhzdW1sb3NzX3BhbG91c2Vfc3VtJGxvc3MpCgojLWludmVyc2UgdHJhbnNmb3JtCnN1bWxvc3NfcGFsb3VzZV9zdW0kaW52ZXJzZV9sb3NzIDwtIDEvc3VtbG9zc19wYWxvdXNlX3N1bSRsb3NzCgojc3Egcm9vdCB0cmFuc2Zvcm1hdGlvbgpzdW1sb3NzX3BhbG91c2Vfc3VtJHNxcm9vdF9sb3NzIDwtIHNxcnQoc3VtbG9zc19wYWxvdXNlX3N1bSRsb3NzKQoKIy0tc2NhbGUgYW5kIGNlbnRlcgpzdW1sb3NzX3BhbG91c2Vfc3VtJHNjYWxlZF9jdWJlX2xvc3MgPC0gc2NhbGUoc3VtbG9zc19wYWxvdXNlX3N1bSRjdWJlX2xvc3MpCnN1bWxvc3NfcGFsb3VzZV9zdW0kc2NhbGVkX2ludmVyc2VfbG9zcyA8LSAKICBzY2FsZShzdW1sb3NzX3BhbG91c2Vfc3VtJGludmVyc2VfbG9zcywgY2VudGVyID0gVFJVRSwgc2NhbGUgPSBUUlVFKQoKIy0tLS0KCgojLUxvYWRpbmcgYWxsIFdIRUFUIGNsYWltcyBmb3IgdGhlIHBhbG91c2UgZnJvbSAxOTg5LTIwMTUKcGFsb3VzZV9zdW1sb3NzIDwtIHJlYWQuY3N2KHRleHQ9Z2V0VVJMCigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL2RtaW5lX2Fub3ZhL21hc3Rlci9QYWxvdXNlX3N1bW1hcnlfc3VtbG9zcy5jc3YiKSwgCmhlYWRlciA9IFRSVUUpCnBhbG91c2VfY291bnRzIDwtIHJlYWQuY3N2KHRleHQ9Z2V0VVJMCigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VyaWNoc2VhbW9uL2RtaW5lX2Fub3ZhL21hc3Rlci9QYWxvdXNlX3N1bW1hcnlfY291bnRzLmNzdiIpLCAKaGVhZGVyID0gVFJVRSkKCgojdXNlIGEgY3ViZSB0cmFuc2Zvcm1hdGlvbiBvbiBsb3NzIGZvciBXSEVBVCBjbGFpbXMKTWF0aC5jYnJ0IDwtIGZ1bmN0aW9uKHgpIHsKICBzaWduKHgpICogYWJzKHgpXigxLzMpCn0KClNvdXRoZXJuX0lEX3N1bWxvc3NfYWxsX3N1bSRjdWJlX2xvc3MgPC0gTWF0aC5jYnJ0KFNvdXRoZXJuX0lEX3N1bWxvc3NfYWxsX3N1bSRsb3NzKQpTb3V0aGVybl9JRF9jb3VudF9hbGxfY291bnQkY3ViZV9jb3VudHMgPC0gTWF0aC5jYnJ0KFNvdXRoZXJuX0lEX2NvdW50X2FsbF9jb3VudCRjb3VudCkKCgojLS1hZ2dyZWdhdGUgcGFsb3VzZSBidXQgbm90IGJ5IGNvdW50eQpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2NvdW50eSA8LSBhZ2dyZWdhdGUobG9zcyB+IGRhbWFnZWNhdXNlICsgeWVhciArIGNvbW1vZGl0eSArIGNvdW50eSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbG91c2Vfc3VtbG9zcywgbWVhbikKCiMtLWFnZ3JlZ2F0ZSBwYWxvdXNlCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUgPC0gYWdncmVnYXRlKGxvc3MgfiBkYW1hZ2VjYXVzZSArIHllYXIgKyBjb21tb2RpdHkgKyBjb3VudHksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWxvdXNlX3N1bWxvc3MsIHN1bSkKCiMtY2FsY3VsYXRlIGN1YmUgbG9zcwpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJGN1YmVfbG9zcyA8LSBNYXRoLmNicnQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSRsb3NzKQoKIy1yZW1vdmUgemVyb3MKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSwgbG9zcyA+IDApCgojLXVzZSBhIGxvZyB0cmFuc2Zvcm0gCgpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJGxvZzEwX2xvc3MgPC0gbG9nMTAocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSRsb3NzKQpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJGxvZ19sb3NzIDwtIGxvZyhwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJGxvc3MpCgojLWludmVyc2UgdHJhbnNmb3JtCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUkaW52ZXJzZV9sb3NzIDwtIDEvcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSRsb3NzCgojc3Egcm9vdCB0cmFuc2Zvcm1hdGlvbgpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJHNxcm9vdF9sb3NzIDwtIHNxcnQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSRsb3NzKQoKIy0tc2NhbGUgYW5kIGNlbnRlcgpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJHNjYWxlZF9jdWJlX2xvc3MgPC0gc2NhbGUocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSRjdWJlX2xvc3MpCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUkc2NhbGVkX2ludmVyc2VfbG9zcyA8LSAKICBzY2FsZShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJGludmVyc2VfbG9zcywgY2VudGVyID0gVFJVRSwgc2NhbGUgPSBUUlVFKQoKIy0tLS0KCmBgYAo8YnI+PC9icj4KPGRpdiBhbGlnbj0ibGVmdCI+CgojIyNTdGVwIDFhOiBPcmlnaW5hbCBJbnN1cmFuY2UgTG9zcyBEYXRhc2V0IC0gUGFjaWZpYyBOb3J0aHdlc3QKClRoZSBmb2xsb3dpbmcgdGFibGUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgb3JpZ2luYWwgZGF0YSB0aGF0IHdhcyBhY3F1aXJlZCBmcm9tIHRoZSBVU0RBIFJpc2sgTWFuYWdlbWVudCBBZ2VuY3kgKFJNQSkuICBFYWNoIHJlY29yZCByZXByZXNlbnRzIGFuIGluZGl2aWR1YWwgaW5zdXJhbmNlIGNsYWltLgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXJyb3I9VFJVRSwgZWNobz1GQUxTRX0KCmtuaXRyOjprYWJsZShSTUFfUE5XWzE6MTAsXSwgZm9ybWF0PSJtYXJrZG93biIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIpKQpgYGAKCjxicj48L2JyPgo8ZGl2IGFsaWduPSJsZWZ0Ij4KCiMjI1N0ZXAgMWI6IEFnZ3JlZ2F0ZWQgSW5zdXJhbmNlIExvc3MgRGF0YXNldCAtIFBhY2lmaWMgTm9ydGh3ZXN0CgpUaGUgZm9sbG93aW5nIHRhYmxlIGlzIGFuIGV4YW1wbGUgb2YgYW4gYWdncmVnYXRlZCBkYXRhc2V0IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZXMuICBIZXJlIHdlIGhhdmUgc3VtbWFyaXplZCBjbGFpbXMgYnkgeWVhciwgY291bnR5LCBjb21tb2RpdHksIGFuZCBkYW1hZ2UgY2F1c2UuICBFYWNoIHVuaXF1ZSBjb21iaW5hdGlvbiBpcyBzdW1tYXJpemVkLCB3aGljaCBpbmNsdWRlcyB0aGUgdG90YWwgc3VtbWFyaXplZCBsb3NzLCB0aGUgbnVtYmVyIG9mIGNsYWltcywgdGhlIHRvdGFsIHN1bW1hcml6ZWQgYWNyZWFnZSwgbG9zcyBwZXIgYWNyZSwgbG9zcyBwZXIgY2xhaW0sIGFuZCBhY3JlcyBwZXIgY2xhaW0uICBUaGlzIGRhdGFzZXQgd2FzIHRoZSBiYXNpcyBmb3Igb3VyIGRhdGEgZXhhbWluYXRpb24uCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1UUlVFLCBlY2hvPUZBTFNFfQoKa25pdHI6OmthYmxlKFJNQV9kYW1hZ2VfUE5XWzE6MTAsXSwgZm9ybWF0PSJtYXJrZG93biIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIpKQpgYGAKCgo8YnI+PC9icj4KPGRpdiBhbGlnbj0ibGVmdCI+CgohW10oaHR0cHM6Ly9kbWluZS5pby93YWYvaW1nL1N0ZXAxLnBuZykKCgoKCgojI1N0ZXAgMzogUGFjaWZpYyBOb3J0aHdlc3QoUE5XKSBTdHVkeSBBcmVhCgpUaGUgZm9sbG93aW5nIG1hcCBzaG93cyB0aGUgdGhyZWUga2V5IGFncmljdWx0dXJhbCByZWdpb25zIHRoYXQgbWFrZSB1cCBvdmVyIDk1JSBvZiBhbGwgYWdyaWN1bHR1cmFsIGluc3VyYW5jZSBsb3NzIGZvciB0aGUgdGhyZWUgc3RhdGUgcmVnaW9uIG9mIFdhc2hpbmd0b24sIE9yZWdvbiwgYW5kIElkYWhvLgoKPGRpdiBhbGlnbj0iY2VudGVyIj4KCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1UUlVFLCBlY2hvPUZBTFNFfQoKbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KG1hcHRvb2xzKQpsaWJyYXJ5KGNsYXNzSW50KQpsaWJyYXJ5KGxlYWZsZXQpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocmFzdGVyKQpsaWJyYXJ5KGh0bWx0b29scykKCnN0YXRlcyA8LSByZWFkU2hhcGVQb2x5KCcvZG1pbmUvZGF0YS9zdGF0ZXMvc3RhdGVzLnNocCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvajRzdHJpbmc9Q1JTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpKQogICAgICAgIHByb2plY3Rpb24gPSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpCiAgICAgICAgCiAgICAgICAgCnRocmVlc3RhdGVzIDwtIHJlYWRTaGFwZVBvbHkoJy9kbWluZS9kYXRhL3N0YXRlcy90aHJlZXN0YXRlX2JvdW5kYXJ5LnNocCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvajRzdHJpbmc9Q1JTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpKQogICAgICAgIHByb2plY3Rpb24gPSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpCgoKI3NldHdkKCIvZG1pbmUvZGF0YS9jb3VudGllcy8iKQoKY291bnRpZXNfd2lsbGFtZXR0ZSA8LSByZWFkU2hhcGVQb2x5KCcvZG1pbmUvZGF0YS9jb3VudGllcy90aHJlZXN0YXRlX3dpbGxhbWV0dGUuc2hwJywKICAgICAgICAgICAgICAgICAgICAgcHJvajRzdHJpbmc9Q1JTCiAgICAgICAgICAgICAgICAgICAgICgiK3Byb2o9bG9uZ2xhdCArZGF0dW09V0dTODQgK2VsbHBzPVdHUzg0ICt0b3dnczg0PTAsMCwwIikpCnByb2plY3Rpb24gPSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpCgoKY291bnRpZXNfSUQgPC0gcmVhZFNoYXBlUG9seSgnL2RtaW5lL2RhdGEvY291bnRpZXMvdGhyZWVzdGF0ZV9zb3V0aGVybklELnNocCcsCiAgICAgICAgICAgICAgICAgICAgIHByb2o0c3RyaW5nPUNSUwogICAgICAgICAgICAgICAgICAgICAoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpKQpwcm9qZWN0aW9uID0gQ1JTKCIrcHJvaj1sb25nbGF0ICtkYXR1bT1XR1M4NCArZWxscHM9V0dTODQgK3Rvd2dzODQ9MCwwLDAiKQoKCmNvdW50aWVzX3BhbG91c2UgPC0gcmVhZFNoYXBlUG9seSgnL2RtaW5lL2RhdGEvY291bnRpZXMvdGhyZWVzdGF0ZV9wYWxvdXNlLnNocCcsCiAgICAgICAgICAgICAgICAgICAgIHByb2o0c3RyaW5nPUNSUwogICAgICAgICAgICAgICAgICAgICAoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpKQpwcm9qZWN0aW9uID0gQ1JTKCIrcHJvaj1sb25nbGF0ICtkYXR1bT1XR1M4NCArZWxscHM9V0dTODQgK3Rvd2dzODQ9MCwwLDAiKQoKI3BhbCA8LSBjb2xvck51bWVyaWMocGFsZXR0ZSA9IGMoIndoaXRlIiwgIm9yYW5nZSIsICJkYXJrb3JhbmdlIiwgInJlZCIsICJkYXJrcmVkIiksCiMgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9IGNvdW50aWVzJE5BTUUpCgoKZXh0ZSA8LSBhcy52ZWN0b3IoZXh0ZW50KHRocmVlc3RhdGVzKSkKCiNsYWJlbCA8LSBwYXN0ZShzZXAgPSAiPGJyLz4iLCBjb3VudGllcyROQU1FLCByb3VuZChjb3VudGllcyROQU1FLCAwKSkKI21hcmtlcnMgPC0gZGF0YS5mcmFtZShsYWJlbCkKI2xhYnMgPC0gYXMubGlzdChjb3VudGllcyROQU1FKQoKI2NvdW50aWVzIDwtIGNvdW50aWVzW2NvdW50aWVzJE5BTUUgIT0gIktvb3RlbmFpIixdCiNjb3VudGllcyA8LSBjb3VudGllc1tjb3VudGllcyROQU1FICE9ICJDbGVhcndhdGVyIixdCgoKICAgIyAgIGxhdF9sb25nMSA8LSBjb29yZGluYXRlcyhjb3VudGllc19wYWxvdXNlKQoKICNjb3VudGllc19hMSA8LSBkYXRhLmZyYW1lKGNvdW50aWVzX3BhbG91c2UpCiAgIyAgICBsYWJzMSA8LSBsYXBwbHkoc2VxKG5yb3coY291bnRpZXNfYTEpKSwgZnVuY3Rpb24oaSkgewogICMgICAgICBwYXN0ZTAoYXMuY2hhcmFjdGVyKGNvdW50aWVzX2ExW2ksICJOQU1FIl0pKQogICMgICAgfSkKICAgICAgCiAgIyAgICBsYXRfbG9uZzIgPC0gY29vcmRpbmF0ZXMoY291bnRpZXNfSUQpCgogI2NvdW50aWVzX2EyIDwtIGRhdGEuZnJhbWUoY291bnRpZXNfSUQpCiAgIyAgICBsYWJzMiA8LSBsYXBwbHkoc2VxKG5yb3coY291bnRpZXNfYTIpKSwgZnVuY3Rpb24oaSkgewogICMgICAgICBwYXN0ZTAoYXMuY2hhcmFjdGVyKGNvdW50aWVzX2EyW2ksICJOQU1FIl0pKQogICMgICAgfSkKICAgICAgCiAgICAgIAogICMgICAgbGF0X2xvbmczIDwtIGNvb3JkaW5hdGVzKGNvdW50aWVzX3dpbGxhbWV0dGUpCgogI2NvdW50aWVzX2EzIDwtIGRhdGEuZnJhbWUoY291bnRpZXNfd2lsbGFtZXR0ZSkKIyAgICAgIGxhYnMzIDwtIGxhcHBseShzZXEobnJvdyhjb3VudGllc19hMykpLCBmdW5jdGlvbihpKSB7CiMgICAgICAgIHBhc3RlMChhcy5jaGFyYWN0ZXIoY291bnRpZXNfYTNbaSwgIk5BTUUiXSkpCiMgICAgICB9KQoKI2xlYWZsZXQoZGF0YSA9IGNvdW50aWVzLCBvcHRpb25zID0gbGVhZmxldE9wdGlvbnMobWluWm9vbSA9IDYsIG1heFpvb20gPSA2KSkgJT4lICBhZGRQcm92aWRlclRpbGVzKCJTdGFtZW4uVG9uZXJMaXRlIikgJT4lIGZpdEJvdW5kcyhleHRlWzFdLCBleHRlWzNdLCBleHRlWzJdLCBleHRlWzRdKSAlPiUgYWRkUG9seWdvbnMoY29sb3IgPSAiYmx1ZSIsICB3ZWlnaHQgPSAxKSAlPiUKCiAgICAgIAojLS0KCgptYXB6IDwtIGxlYWZsZXQob3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21TbmFwID0gLjQsIHpvb21EZWx0YSA9IC40KSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JSAKICAKIAogIAogIGZpdEJvdW5kcyhleHRlWzFdLCBleHRlWzNdLCBleHRlWzJdLCBleHRlWzRdKSAlPiUgYWRkUG9seWdvbnMoZGF0YSA9IGNvdW50aWVzX3BhbG91c2UsIGNvbG9yID0gImJsdWUiLCAgd2VpZ2h0ID0gMSkgJT4lIGFkZFBvbHlnb25zKGRhdGEgPSBjb3VudGllc19JRCwgY29sb3IgPSAicmVkIiwgIHdlaWdodCA9IDEpICU+JSBhZGRQb2x5Z29ucyhkYXRhID0gY291bnRpZXNfd2lsbGFtZXR0ZSwgY29sb3IgPSAiZ3JlZW4iLCAgd2VpZ2h0ID0gMSkgICU+JSBhZGRQb2x5Z29ucyhkYXRhID0gc3RhdGVzLCBzdHJva2UgPSBUUlVFLCBjb2xvciA9ICJibGFjayIsICB3ZWlnaHQgPSAzLCBmaWxsT3BhY2l0eSA9IDApICAlPiUgYWRkTGVnZW5kKGNvbG9ycyA9IGMoInJlZCIsICJibHVlIiwgImdyZWVuIiksIGxhYmVscyA9IGMoIlNvdXRoZXJuIElkYWhvIFZhbGxleSIsICJJbmxhbmQgUGFjaWZpYyBOb3J0aHdlc3QgKElOUFcpIiwgIldpbGxhbWV0dGUgVmFsbGV5IiksIHZhbHVlcyA9IGMoIlNvdXRoZXJuIElkYWhvIFZhbGxleSIsICJJbmxhbmQgUGFjaWZpYyBOb3J0aHdlc3QgKElOUFcpIiwgIldpbGxhbWV0dGUgVmFsbGV5IiksIG9wYWNpdHkgPSAwLjUsIHRpdGxlID0gTlVMTCwgcG9zaXRpb24gPSAidG9wcmlnaHQiKQoKI2FkZExhYmVsT25seU1hcmtlcnMoZGF0YSA9IGNvdW50aWVzX3BhbG91c2UsIGxuZyA9IGxhdF9sb25nMVssMV0sIGxhdCA9IGxhdF9sb25nMVssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMxLCBIVE1MKSwgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKHN0eWxlID0gbGlzdCgiZm9udC1mYW1pbHkiID0gInNlcmlmIiksIG5vSGlkZSA9IFRSVUUsIGRpcmVjdGlvbiA9ICdtaWRkbGUnLCB0ZXh0T25seSA9IFRSVUUsIHRleHRzaXplID0gIjE4cHgiLCBjb2xvciA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUsIGNvbCA9ICJ3aGl0ZSIpCiMpKSAlPiUKCiNhZGRMYWJlbE9ubHlNYXJrZXJzKGRhdGEgPSBjb3VudGllc19JRCwgbG5nID0gbGF0X2xvbmcyWywxXSwgbGF0ID0gbGF0X2xvbmcyWywyXSwgbGFiZWwgPSBsYXBwbHkobGFiczIsIEhUTUwpLCBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoc3R5bGUgPSBsaXN0KCJmb250LWZhbWlseSIgPSAic2VyaWYiKSwgbm9IaWRlID0gVFJVRSwgZGlyZWN0aW9uID0gJ21pZGRsZScsIHRleHRPbmx5ID0gVFJVRSwgdGV4dHNpemUgPSAiMThweCIsIGNvbG9yID0gIndoaXRlIiwgIG9mZnNldCA9IGMoMjAsIDApLCBtYXJrZXJPcHRpb25zKHJpc2VPbkhvdmVyID0gVFJVRSwgY29sID0gIndoaXRlIikKIykpICU+JQoKI2FkZExhYmVsT25seU1hcmtlcnMoZGF0YSA9IGNvdW50aWVzX3dpbGxhbWV0dGUsIGxuZyA9IGxhdF9sb25nM1ssMV0sIGxhdCA9IGxhdF9sb25nM1ssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMzLCBIVE1MKSwgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKHN0eWxlID0gbGlzdCgiZm9udC1mYW1pbHkiID0gInNlcmlmIiksIG5vSGlkZSA9IFRSVUUsIGRpcmVjdGlvbiA9ICdtaWRkbGUnLCB0ZXh0T25seSA9IFRSVUUsIHRleHRzaXplID0gIjE4cHgiLCBjb2xvciA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUsIGNvbCA9ICJ3aGl0ZSIpCiMpKSAKICAgICAgICAKYWRkU2NhbGVCYXIobWFweiwgcG9zaXRpb24gPSBjKCJ0b3ByaWdodCIpLCBvcHRpb25zID0gc2NhbGVCYXJPcHRpb25zKCkpCgoKCiNtYXJrZXJPcHRpb25zKG1hcCwgcmlzZU9uSG92ZXIgPSBUUlVFKQogI2FkZExlZ2VuZChjb2xvcnMgPSBjKCJyZWQiLCAiYmx1ZSIsICJncmVlbiIpLCBsYWJlbHMgPSBjKCJJTlBXIiwgIlNvdXRoZXJuIElEIiwgIldpbGxhbWV0dGUiKSwgdmFsdWVzID0gfmMoIlNvdXRoZXJuIElkYWhvIFZhbGxleSIsICJJbmxhbmQgUGFjaWZpYyBOb3J0aHdlc3QgKElOUFcpIiwgIldpbGxhbWV0dGUgVmFsbGV5IiksIG9wYWNpdHkgPSAwLjUsIHRpdGxlID0gTlVMTCwgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiKQoKCmBgYAoKPGJyPjwvYnI+CjxkaXYgYWxpZ249ImxlZnQiPgoKIVtdKGh0dHBzOi8vZG1pbmUuaW8vd2FmL2ltZy9TdGVwMS5wbmcpCjxicj48L2JyPgo8ZGl2IGFsaWduPSJsZWZ0Ij4KCiMjU3RlcCA0OiBQTlcgaW5zdXJhbmNlIGNsYWltIGxvc3Mgc3VtbWFyeQoKPGRpdiBhbGlnbj0iY2VudGVyIj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPVRSVUUsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gOX0KI3BhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUsIHllYXIgPj0gMjAwMSAmIHllYXIgPD0gMjAxNSkKCiNwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1IDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlLCBjb21tb2RpdHkgPT0gIldIRUFUIikKCiMtLUFuYWx5c2lzIGZvciBFbnRpcmUgUE5XLCBmcm9tIDIwMDEgdG8gMjAxNQoKbGlicmFyeShzdHJpbmdpKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNSA8LSBhZ2dyZWdhdGUoU291dGhlcm5fSURfc3VtbG9zcyRsb3NzLCBsaXN0KFNvdXRoZXJuX0lEX3N1bWxvc3MkeWVhciksIEZVTiA9ICJzdW0iKQpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2RjIDwtIGFnZ3JlZ2F0ZShTb3V0aGVybl9JRF9zdW1sb3NzJGxvc3MsIGxpc3QoU291dGhlcm5fSURfc3VtbG9zcyRkYW1hZ2VjYXVzZSksIEZVTiA9ICJzdW0iKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jIDwtIGFnZ3JlZ2F0ZShTb3V0aGVybl9JRF9zdW1sb3NzJGxvc3MsIGxpc3QoU291dGhlcm5fSURfc3VtbG9zcyRjb21tb2RpdHkpLCBGVU4gPSAic3VtIikKCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfYykgPC0gYygiY29tbW9kaXR5IiwgImxvc3MiKQoKYyA8LSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2Nbb3JkZXIocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jJGxvc3MpLF0gCgpjMiA8LSBjW3NlcShkaW0oYylbMV0sMSksXQoKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9kYykgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpCgpkYyA8LSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2RjW29yZGVyKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfZGMkbG9zcyksXSAKCmRjMiA8LSBkY1tzZXEoZGltKGRjKVsxXSwxKSxdCgpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1KSA8LSBjKCJ5ZWFyIiwgImxvc3MiKQoKI3BhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlIDwtIHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVbb3JkZXIocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNSRsb3NzKSxdIAoKWCA8LSBkYzIKCiNYIDwtIHBhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlW29yZGVyKHBhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlJGxvc3MpLF0gCiNjb2xuYW1lcyhYKSA8LSBjKCJkYW1hZ2VjYXVzZSIsICJsb3NzIikKClhYIDwtIFgKWFggPC0gc3Vic2V0KFgsIGxvc3MgPiA1MDAwMDAwMCkKWVlZMSA8LSBYWAoKdHQzIDwtIHR0aGVtZV9kZWZhdWx0KGNvcmU9bGlzdChmZ19wYXJhbXM9bGlzdChoanVzdD0wLCB4PTAuMSkpLAogICAgICAgICAgICAgICAgICAgICAgcm93aGVhZD1saXN0KGZnX3BhcmFtcz1saXN0KGhqdXN0PTAsIHg9MCkpKQoKI1lZWTE8LSBZWVkxW3NlcShkaW0oWVlZMSlbMV0sMSksXQpZWVkxJGxvc3MgPC0gcm91bmQoWVlZMSRsb3NzLCAwKQojZ3JpZC50YWJsZShZWVkxLCB0aGVtZSA9IHR0Mywgcm93cyA9IE5VTEwpCgpZWVkyIDwtIFlZWTEKWVlZMiRsb3NzIDwtIGZvcm1hdChZWVkyJGxvc3MsYmlnLm1hcms9IiwiLHNjaWVudGlmaWM9RkFMU0UpCllZWTIkbG9zcyA8LSBwYXN0ZSgiJCIsIFlZWTIkbG9zcywgc2VwPSIiKQpZWVkyJGxvc3MgPC0gZ3N1YigiICIsICIiLCBZWVkyJGxvc3MsIGZpeGVkID0gVFJVRSkKCmRkMiA8LSBjYmluZChZWVkyWzE6MTQsIF0pCmNvbG5hbWVzKGRkMikgPC0gYygiZGFtYWdlIGNhdXNlIiwgImxvc3MiKQpkZDJbaXMubmEoZGQyKV0gPC0gIiIKCgpsZXZlbHMoWVlZMSRkYW1hZ2VjYXVzZSlbOF0gPC0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIKcGFyKG1hcj1jKDEyLjUsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQojbGV2ZWxzKFlZWTEkY29tbW9kaXR5KVsxXSA8LSAiQURKIEdST1NTIFJFVkVOVUUiCmJhcnBsb3QoWVlZMSRsb3NzLCBuYW1lcy5hcmcgPSBZWVkxJGRhbWFnZWNhdXNlLCBsYXMgPSAzLCB5YXh0PSJuIiwgY29sID0gImxpZ2h0Ymx1ZSIsIHhsYWIgPSAiIiwgY2V4Lm1haW4gPSAxLjksIGNleC5sYWIgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxKSAKdGl0bGUobWFpbiA9ICJQTlcgdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgZGFtYWdlIGNhdXNlOiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCnB0cyA8LSBwcmV0dHkoWVlZMSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoWVlZMSRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGNleC5heGlzID0gMS40LCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCiNhYmxpbmUodiA9IDE0LjUsIGx0eSA9IDIsIGNvbG9yID0gInJlZCIpCgptdGV4dCgiRGFtYWdlIENhdXNlIiwgY2V4ID0gMS40LCBzaWRlPTEsIGxpbmU9MTEpCm10ZXh0KCJJbnN1cmFuY2UgQ2xhaW0gTG9zcyAoJCkiLCBjZXggPSAxLjQsIHNpZGU9MiwgbGluZT01KQoKCmh0bWxUYWJsZShkZDIsCiAgICAgICAgICBjZ3JvdXAgPSBjKCIyMDAxLTIwMTUiKSwKICAgICAgICAgIG4uY2dyb3VwID0gYygyKSwKICAgICAgICAgIGNhcHRpb24gPSAiUE5XIHRvdGFsIGluc3VyYW5jZSBsb3NzIGJ5IHllYXIsIDIwMDEtMjAxNSIsCiAgICAgICAgICBhbGlnbiA9ICJjIiwKICAgICAgICAgIHJuYW1lcyA9IEZBTFNFLAogICAgICAgICAgY3NzLmNlbGwgPSAicGFkZGluZy1sZWZ0OiAuNWVtOyBwYWRkaW5nLXJpZ2h0OiAuNWVtOyIpCgpYIDwtIGMyCgojWCA8LSBwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZVtvcmRlcihwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZSRsb3NzKSxdIAojY29sbmFtZXMoWCkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpCgpYWCA8LSBYClhYIDwtIHN1YnNldChYLCBsb3NzID4gNTAwMDAwMDApCllZWTEgPC0gWFgKCnR0MyA8LSB0dGhlbWVfZGVmYXVsdChjb3JlPWxpc3QoZmdfcGFyYW1zPWxpc3QoaGp1c3Q9MCwgeD0wLjEpKSwKICAgICAgICAgICAgICAgICAgICAgIHJvd2hlYWQ9bGlzdChmZ19wYXJhbXM9bGlzdChoanVzdD0wLCB4PTApKSkKCiNZWVkxPC0gWVlZMVtzZXEoZGltKFlZWTEpWzFdLDEpLF0KWVlZMSRsb3NzIDwtIHJvdW5kKFlZWTEkbG9zcywgMCkKI2dyaWQudGFibGUoWVlZMSwgdGhlbWUgPSB0dDMsIHJvd3MgPSBOVUxMKQoKWVlZMiA8LSBZWVkxCllZWTIkbG9zcyA8LSBmb3JtYXQoWVlZMiRsb3NzLGJpZy5tYXJrPSIsIixzY2llbnRpZmljPUZBTFNFKQpZWVkyJGxvc3MgPC0gcGFzdGUoIiQiLCBZWVkyJGxvc3MsIHNlcD0iIikKWVlZMiRsb3NzIDwtIGdzdWIoIiAiLCAiIiwgWVlZMiRsb3NzLCBmaXhlZCA9IFRSVUUpCgpkZDIgPC0gY2JpbmQoWVlZMlsxOjE0LCBdKQpjb2xuYW1lcyhkZDIpIDwtIGMoImNvbW1vZGl0eSIsICJsb3NzIikKZGQyW2lzLm5hKGRkMildIDwtICIiCgpZWVkxJGNvbW1vZGl0eSA8LSB0b2xvd2VyKFlZWTEkY29tbW9kaXR5KQpZWVkxJGNvbW1vZGl0eSA8LSBzdHJpX3RyYW5zX2dlbmVyYWwoWVlZMSRjb21tb2RpdHksIGlkID0gIlRpdGxlIikKCnBhcihtYXI9Yyg5LCA3LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDcsIDEsIDApLCBsYXM9MCkKI2xldmVscyhZWVkxJGNvbW1vZGl0eSlbMV0gPC0gIkFESiBHUk9TUyBSRVZFTlVFIgpiYXJwbG90KFlZWTEkbG9zcywgbmFtZXMuYXJnID0gWVlZMSRjb21tb2RpdHksIGxhcyA9IDMsIHlheHQ9Im4iLCBjb2wgPSAibGlnaHRibHVlIiwgY2V4Lm1haW4gPSAxLjUsIGNleC5sYWIgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxKSAKdGl0bGUobWFpbiA9ICJQTlcgdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgY29tbW9kaXR5OiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCnB0cyA8LSBwcmV0dHkoWVlZMSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoWVlZMSRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGNleC5heGlzID0gMS40LCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCiNhYmxpbmUodiA9IDE0LjUsIGx0eSA9IDIsIGNvbG9yID0gInJlZCIpCgptdGV4dCgiSW5zdXJhbmNlIENsYWltIExvc3MgKCQpIiwgY2V4ID0gMS40LCBzaWRlPTIsIGxpbmU9NSkKbXRleHQoIkNvbW1vZGl0eSIsIGNleCA9IDEuNCwgc2lkZT0xLCBsaW5lPTYpCgoKaHRtbFRhYmxlKGRkMiwKICAgICAgICAgIGNncm91cCA9IGMoIjIwMDEtMjAxNSIpLAogICAgICAgICAgbi5jZ3JvdXAgPSBjKDIpLAogICAgICAgICAgY2FwdGlvbiA9ICJQTlcgdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgeWVhciwgMjAwMS0yMDE1IiwKICAgICAgICAgIGFsaWduID0gImMiLAogICAgICAgICAgcm5hbWVzID0gRkFMU0UsCiAgICAgICAgICBjc3MuY2VsbCA9ICJwYWRkaW5nLWxlZnQ6IC41ZW07IHBhZGRpbmctcmlnaHQ6IC41ZW07IikKCgpYIDwtIHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUKCiNYIDwtIHBhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlW29yZGVyKHBhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlJGxvc3MpLF0gCiNjb2xuYW1lcyhYKSA8LSBjKCJkYW1hZ2VjYXVzZSIsICJsb3NzIikKClhYIDwtIFgKI1hYIDwtIHN1YnNldChYLCBsb3NzID4gNTAwMDAwMDApCllZWTEgPC0gWFgKCnR0MyA8LSB0dGhlbWVfZGVmYXVsdChjb3JlPWxpc3QoZmdfcGFyYW1zPWxpc3QoaGp1c3Q9MCwgeD0wLjEpKSwKICAgICAgICAgICAgICAgICAgICAgIHJvd2hlYWQ9bGlzdChmZ19wYXJhbXM9bGlzdChoanVzdD0wLCB4PTApKSkKCiNZWVkxPC0gWVlZMVtzZXEoZGltKFlZWTEpWzFdLDEpLF0KWVlZMSRsb3NzIDwtIHJvdW5kKFlZWTEkbG9zcywgMCkKI2dyaWQudGFibGUoWVlZMSwgdGhlbWUgPSB0dDMsIHJvd3MgPSBOVUxMKQoKWVlZMiA8LSBZWVkxCllZWTIkbG9zcyA8LSBmb3JtYXQoWVlZMiRsb3NzLGJpZy5tYXJrPSIsIixzY2llbnRpZmljPUZBTFNFKQpZWVkyJGxvc3MgPC0gcGFzdGUoIiQiLCBZWVkyJGxvc3MsIHNlcD0iIikKWVlZMiRsb3NzIDwtIGdzdWIoIiAiLCAiIiwgWVlZMiRsb3NzLCBmaXhlZCA9IFRSVUUpCgpkZDIgPC0gY2JpbmQoWVlZMlsxOjE1LCBdKQpjb2xuYW1lcyhkZDIpIDwtIGMoInllYXIiLCAibG9zcyIpCmRkMltpcy5uYShkZDIpXSA8LSAiIgoKcGFyKG1hcj1jKDcsIDcuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNiwgMSwgMCksIGxhcz0wKQojbGV2ZWxzKFlZWTEkY29tbW9kaXR5KVsxXSA8LSAiQURKIEdST1NTIFJFVkVOVUUiCmJhcnBsb3QoWVlZMSRsb3NzLCBuYW1lcy5hcmcgPSBZWVkxJHllYXIsIGxhcyA9IDMsIHlheHQ9Im4iLCBjb2wgPSAibGlnaHRibHVlIiwgY2V4LmxhYiA9IDEuNCwgY2V4Lm1haW4gPSAxLjUsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxKSAKdGl0bGUobWFpbiA9ICJQTlcgdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgeWVhcjogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGFkaiA9IDAsIGNleC5tYWluID0gMS45KQoKcHRzIDwtIHByZXR0eShZWVkxJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShZWVkxJGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgY2V4LmF4aXMgPSAxLjQsIGF0ID0gcHRzMiwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKI2FibGluZSh2ID0gMTQuNSwgbHR5ID0gMiwgY29sb3IgPSAicmVkIikKCm10ZXh0KCJJbnN1cmFuY2UgQ2xhaW0gTG9zcyAoJCkiLCBjZXggPSAxLjQsIHNpZGU9MiwgbGluZT01KQptdGV4dCgiWWVhciIsIGNleCA9IDEuNCwgc2lkZT0xLCBsaW5lPTUpCgoKaHRtbFRhYmxlKGRkMiwKICAgICAgICAgIGNncm91cCA9IGMoIjIwMDEtMjAxNSIpLAogICAgICAgICAgbi5jZ3JvdXAgPSBjKDIpLAogICAgICAgICAgY2FwdGlvbiA9ICJQTlcgdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgeWVhciwgMjAwMS0yMDE1IiwKICAgICAgICAgIGFsaWduID0gImMiLAogICAgICAgICAgcm5hbWVzID0gRkFMU0UsCiAgICAgICAgICBjc3MuY2VsbCA9ICJwYWRkaW5nLWxlZnQ6IC41ZW07IHBhZGRpbmctcmlnaHQ6IC41ZW07IikKYGBgCgo8ZGl2Pgo8YnI+PC9icj4KPGRpdiBhbGlnbj0ibGVmdCI+CgohW10oaHR0cHM6Ly9kbWluZS5pby93YWYvaW1nL1N0ZXAxLnBuZykKCjxicj48L2JyPgo8ZGl2IGFsaWduPSJsZWZ0Ij4KCiMjU3RlcCA0OiBQTlcgaW5zdXJhbmNlIGNsYWltIGZyZXFlbmN5IHN1bW1hcnkKCjxkaXYgYWxpZ249ImNlbnRlciI+CgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1UUlVFLCBlY2hvPUZBTFNFLCBmaWcud2lkdGggPSAxMCwgZmlnLmhlaWdodCA9IDl9CgpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShncmlkRXh0cmEpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShodG1sVGFibGUpCmxpYnJhcnkoc3RyaW5naSkKCiNwaWUgY2hhcnQgZm9yIDIwMDctMjAxNQoKb3B0aW9ucyhzY2lwZW49OTk5KQoKYWRkTm9BbnN3ZXIgPC0gZnVuY3Rpb24oeCl7CiAgaWYoaXMuZmFjdG9yKHgpKSByZXR1cm4oZmFjdG9yKHgsIGxldmVscz1jKGxldmVscyh4KSwgIk5vIEFuc3dlciIpKSkKICByZXR1cm4oeCkKfQoKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzIDwtIGFnZ3JlZ2F0ZShTb3V0aGVybl9JRF9zdW1sb3NzJGxvc3NwZXJhY3JlcywgbGlzdCggU291dGhlcm5fSURfc3VtbG9zcyR5ZWFyLCBTb3V0aGVybl9JRF9zdW1sb3NzJHN0YXRlLCBTb3V0aGVybl9JRF9zdW1sb3NzJGNvbW1vZGl0eSksIEZVTiA9ICJtZWFuIikKCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzKSA8LSBjKCJ5ZWFyIiwgInN0YXRlIiwgImNvbW1vZGl0eSIsICAibG9zc3BlcmFjcmVzIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiA8LSBhZ2dyZWdhdGUoU291dGhlcm5fSURfc3VtbG9zcyRsb3NzcGVyYWNyZXMsIGxpc3QoIFNvdXRoZXJuX0lEX3N1bWxvc3MkeWVhciwgU291dGhlcm5fSURfc3VtbG9zcyRkYW1hZ2VjYXVzZSksIEZVTiA9ICJtZWFuIikKCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMikgPC0gYygieWVhciIsICJkYW1hZ2VjYXVzZSIsICJsb3NzcGVyYWNyZXMiKQoKI3BhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcywgbG9zc3BlcmFjcmVzID4gMjAwKQojcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMyIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlczIsIGxvc3NwZXJhY3JlcyA+IDIwMCkKCiNwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMsIGNvbW1vZGl0eSAhPSAiQURKVVNURUQgR1JPU1MgUkVWRU5VRSIpCiNwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMsIGNvbW1vZGl0eSAhPSAiT3RoZXIgKFNub3cvTGlnaHRuaW5nLUV0Yy4pIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMyJGRhbWFnZWNhdXNlKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkY29tbW9kaXR5IDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHkpCgoKbGV2ZWxzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzJGNvbW1vZGl0eSlbMTRdIDwtICJGT1JBR0UiCmxldmVscyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHkpWzE1XSA8LSAiQVBSSUNPVFMiCmxldmVscyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHkpWzE2XSA8LSAiRlJFRVNUT05FIFBFQUNIRVMiCmxldmVscyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHkpWzE3XSA8LSAiTkVDVEFSSU5FUyIKbGV2ZWxzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzJGNvbW1vZGl0eSlbMjRdIDwtICJQQVNUVVJFLCBSQU5HRUxBTkQiCmxldmVscyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHkpWzMwXSA8LSAiQkxBQ0tCRVJSSUVTIgoKbGV2ZWxzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRkYW1hZ2VjYXVzZSlbOF0gPC0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIKbGV2ZWxzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRkYW1hZ2VjYXVzZSlbMjVdIDwtICJTbm93L0xpZ2h0bmluZyIKbGV2ZWxzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRkYW1hZ2VjYXVzZSlbMjFdIDwtICJIdXJyaWNhbmUiCmxldmVscyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlczIkZGFtYWdlY2F1c2UpWzI0XSA8LSAiTXljb3RveGluIgpsZXZlbHMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMyJGRhbWFnZWNhdXNlKVsyMl0gPC0gIkxhY2sgSXJyaWcgUHJlcCIKCgoKCgoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzIDwtIGFnZ3JlZ2F0ZShTb3V0aGVybl9JRF9zdW1sb3NzJGxvc3MsIGJ5ID0gbGlzdCggU291dGhlcm5fSURfc3VtbG9zcyR5ZWFyLCBTb3V0aGVybl9JRF9zdW1sb3NzJGNvbW1vZGl0eSksIEZVTiA9ICJzdW0iKQoKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzKSA8LSBjKCJ5ZWFyIiwgImNvbW1vZGl0eSIsICAibG9zcyIpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyIDwtIGFnZ3JlZ2F0ZShTb3V0aGVybl9JRF9zdW1sb3NzJGxvc3MsIGxpc3QoIFNvdXRoZXJuX0lEX3N1bWxvc3MkeWVhciwgU291dGhlcm5fSURfc3VtbG9zcyRkYW1hZ2VjYXVzZSksIEZVTiA9ICJzdW0iKQoKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzMikgPC0gYygieWVhciIsICJkYW1hZ2VjYXVzZSIsICJsb3NzIikKCnBzbG9zcyA8LSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzLCBsb3NzID4gMjAwMDAwMDApCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIsIGxvc3MgPiAyMDAwMDAwMCkKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzLCBjb21tb2RpdHkgIT0gIkFESlVTVEVEIEdST1NTIFJFVkVOVUUiKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzMiRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzMiRkYW1hZ2VjYXVzZSkKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyRjb21tb2RpdHkgPC0gZmFjdG9yKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyRjb21tb2RpdHkpCgoKbGV2ZWxzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkZGFtYWdlY2F1c2UpWzRdIDwtICJFeGNlc3NpdmUgTW9pc3R1cmUiCgoKCgoKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQgPC0gYWdncmVnYXRlKFNvdXRoZXJuX0lEX3N1bWxvc3MkbG9zcywgbGlzdCggU291dGhlcm5fSURfc3VtbG9zcyR5ZWFyLCBTb3V0aGVybl9JRF9zdW1sb3NzJHN0YXRlLCBTb3V0aGVybl9JRF9zdW1sb3NzJGNvbW1vZGl0eSksIEZVTiA9ICJsZW5ndGgiKQoKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCkgPC0gYygieWVhciIsICJzdGF0ZSIsICJjb21tb2RpdHkiLCAgImxvc3MiKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudDIgPC0gYWdncmVnYXRlKFNvdXRoZXJuX0lEX3N1bWxvc3MkbG9zcywgbGlzdCggU291dGhlcm5fSURfc3VtbG9zcyR5ZWFyLCBTb3V0aGVybl9JRF9zdW1sb3NzJGRhbWFnZWNhdXNlKSwgRlVOID0gImxlbmd0aCIpCgpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MikgPC0gYygieWVhciIsICJkYW1hZ2VjYXVzZSIsICJsb3NzIikKCiMtYm94cGxvdHMgb2YgY291bnQgZGF0YSBmb3IgYWxsIGNvbW1vZGl0aWVzIGFuZCBhbGwgZGFtYWdlIGNhdXNlcy0gMTk4OS0yMDE1CgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50IDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50LCBsb3NzID4gNTApCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQyIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiwgbG9zcyA+IDUwKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCwgY29tbW9kaXR5ICE9ICJBREpVU1RFRCBHUk9TUyBSRVZFTlVFIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQyJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiRkYW1hZ2VjYXVzZSkKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkY29tbW9kaXR5IDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGNvbW1vZGl0eSkKCgpsZXZlbHMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudDIkZGFtYWdlY2F1c2UpWzVdIDwtICJFeGNlc3NpdmUgTW9pc3R1cmUiCmxldmVscyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiRkYW1hZ2VjYXVzZSlbMTFdIDwtICJPdGhlciIKCgojcHJvcGVyPWZ1bmN0aW9uKHgpIHBhc3RlMCh0b3VwcGVyKHN1YnN0cih4LCAxLCAxKSksIHRvbG93ZXIoc3Vic3RyaW5nKHgsIDIpKSkKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkY29tbW9kaXR5IDwtIHRvbG93ZXIocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRjb21tb2RpdHkpCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkY29tbW9kaXR5IDwtIHN0cmlfdHJhbnNfZ2VuZXJhbChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGNvbW1vZGl0eSwgaWQgPSAiVGl0bGUiKQoKcGFyKG1hcj1jKDkuNSwgNi4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCgpib3hwbG90KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkbG9zcyB+IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkY29tbW9kaXR5LCBjb2wgPSAnbGlnaHRibHVlJywgeWxhYiA9ICJJbnN1cmFuY2UgQ2xhaW0gRnJlcXVlbmN5IiwgeWF4dCA9ICduJywgeGxhYiA9ICIiLCBuYW1lcy5hcmcgPSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGNvbW1vZGl0eSwgbGFzID0gMywgY2V4LmF4aXMgPSAxLjQsIGNleC5tYWluID0gMS40LCBjZXgubGFiID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSkKYXhpcygyLCBsYXMgPSAxLCBjZXguYXhpcyA9IDEuNCwgYXQgPSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRsb3NzKSwgbGFiZWxzID0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkbG9zcykpCgojc3RyaXBjaGFydChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGxvc3MgfiBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGNvbW1vZGl0eSwgdmVydGljYWwgPSBUUlVFLCAgCiMgICAgbWV0aG9kID0gImppdHRlciIsIGFkZCA9IFRSVUUsIHBjaCA9IDIwLCBjb2w9dW5pcXVlKGFzLm51bWVyaWMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRzdGF0ZSkpICkKCnRpdGxlKHhsYWI9IkNvbW1vZGl0eSIsIGxpbmU9Ny41LCBjZXgubGFiID0gMS40KQp0aXRsZShtYWluPSJQTlcgaW5zdXJhbmNlIGNsYWltcyBieSBjb21tb2RpdHk6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBhZGogPSAwLCBjZXgubWFpbiA9IDEuOSkKCgoKcGFyKG1hcj1jKDEyLjcsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQoKYm94cGxvdChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudDIkZGFtYWdlY2F1c2UsIGNvbCA9ICdsaWdodGJsdWUnLCB5bGFiID0gIkluc3VyYW5jZSBDbGFpbSBGcmVxdWVuY3kiLCAgeWF4dCA9ICduJywgeGxhYiA9ICIiLCBuYW1lcy5hcmcgPSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiRkYW1hZ2VjYXVzZSwgbGFzID0gMywgY2V4Lm1haW4gPSAxLjksIGNleC5sYWIgPSAxLjQsIGNleC5heGlzID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSwgb3V0bGluZSA9IEZBTFNFKQpheGlzKDIsIGxhcyA9IDEsIGNleC5heGlzID0gMS4yLCBhdCA9IHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiRsb3NzKSwgbGFiZWxzID0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQyJGxvc3MpKQoKdGl0bGUoeGxhYj0iRGFtYWdlIENhdXNlIiwgbGluZT0xMS41LCBjZXgubGFiID0gMS40KQp0aXRsZShtYWluPSJQTlcgaW5zdXJhbmNlIGNsYWltcyBieSBkYW1hZ2UgY2F1c2U6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBhZGogPSAwLCBjZXgubWFpbiA9IDEuOSkKCgoKcGFyKG1hcj1jKDgsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQoKbWVhbnMgPC0gYWdncmVnYXRlKGxvc3MgfiAgY29tbW9kaXR5LCBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MsIG1lYW4pCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MkY29tbW9kaXR5IDwtIHRvbG93ZXIocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSkKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSA8LSBzdHJpX3RyYW5zX2dlbmVyYWwocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSwgaWQgPSAiVGl0bGUiKQoKYm94cGxvdChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MkbG9zcyB+IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyRjb21tb2RpdHksIGNvbCA9ICdsaWdodGJsdWUnLCB5bGFiID0gIkluc3VyYW5jZSBDbGFpbSBMb3NzICgkKSIsIHlheHQgPSAnbicsIHhsYWIgPSAiIiwgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSwgbGFzID0gMywgY2V4LmF4aXMgPSAxLjQsIGNleC5tYWluID0gMS40LCBjZXgubGFiID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSwgb3V0bGluZSA9IEZBTFNFKQojYXhpcygyLCBsYXMgPSAxLCBjZXguYXhpcyA9IDEuMiwgYXQgPSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGxvc3MpLCBsYWJlbHMgPSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGxvc3MpKQoKcHRzIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGNleC5heGlzID0gMS40LCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCiNhYmxpbmUodiA9IDE0LjUsIGx0eSA9IDIsIGNvbG9yID0gInJlZCIpCiNzdHJpcGNoYXJ0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSwgdmVydGljYWwgPSBUUlVFLCAgCiMgICAgbWV0aG9kID0gImppdHRlciIsIGFkZCA9IFRSVUUsIHBjaCA9IDIwLCBjb2w9dW5pcXVlKGFzLm51bWVyaWMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJHN0YXRlKSkgKQoKdGl0bGUoeGxhYj0iQ29tbW9kaXR5IiwgbGluZT02LCBjZXgubGFiID0gMS40KQp0aXRsZShtYWluPSJQTlcgaW5zdXJhbmNlIGxvc3MgYnkgY29tbW9kaXR5OiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCgojcG9pbnRzKDE6bnJvdyhtZWFucyksIG1lYW5zJGxvc3MsIGNvbCA9ICJyZWQiKQojdGV4dCgxOm5yb3cobWVhbnMpLCBtZWFucyRsb3NzICsgMC4wOCwgbGFiZWxzID0gbWVhbnMkbG9zcykKCgpwYXIobWFyPWMoMTIuMiwgNi4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCgpib3hwbG90KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkbG9zcyB+IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkZGFtYWdlY2F1c2UsIGNvbCA9ICdsaWdodGJsdWUnLCB5bGFiID0gIkluc3VyYW5jZSBDbGFpbSBMb3NzICgkKSIsICB5YXh0ID0gJ24nLCB4bGFiID0gIiIsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkZGFtYWdlY2F1c2UsIGxhcyA9IDMsIGNleC5sYWIgPSAxLjQsIGNleC5heGlzID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSwgb3V0bGluZSA9IEZBTFNFKQojYXhpcygyLCBsYXMgPSAxLCBjZXguYXhpcyA9IDEuMiwgYXQgPSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzMiRsb3NzKSwgbGFiZWxzID0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkbG9zcykpCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzMiRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzMiRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGNleC5heGlzID0gMS4yLCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCiNzdHJpcGNoYXJ0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkbG9zcyB+IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkZGFtYWdlY2F1c2UsIHZlcnRpY2FsID0gVFJVRSwgIAogIyAgIG1ldGhvZCA9ICJqaXR0ZXIiLCBhZGQgPSBUUlVFLCBwY2ggPSAyMCwgY29sPXVuaXF1ZShhcy5udW1lcmljKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkc3RhdGUpKSApCgp0aXRsZSh4bGFiPSJEYW1hZ2UgQ2F1c2UiLCBsaW5lPTExLCBjZXgubGFiID0gMS40KQp0aXRsZShtYWluPSJQTlcgaW5zdXJhbmNlIGxvc3MgYnkgZGFtYWdlIGNhdXNlOiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCgoKCnBhcihtYXI9YygxMS41LCA2LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDQsIDEsIDApLCBsYXM9MCkKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzJGNvbW1vZGl0eSA8LSB0b2xvd2VyKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzJGNvbW1vZGl0eSkKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkY29tbW9kaXR5IDwtIHN0cmlfdHJhbnNfZ2VuZXJhbChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHksIGlkID0gIlRpdGxlIikKCmJveHBsb3QocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkbG9zcyB+IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzJGNvbW1vZGl0eSwgY29sID0gJ2xpZ2h0Ymx1ZScsIHlsYWIgPSAiSW5zdXJhbmNlIENsYWltIExvc3MgcGVyIEFjcmUgKCQpIiwgeWF4dCA9ICduJywgeGxhYiA9ICIiLCBuYW1lcy5hcmcgPSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHksIGxhcyA9IDMsIGNleC5heGlzID0gMS40LCBjZXgubWFpbiA9IDEuNCwgY2V4LmxhYiA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKYXhpcygyLCBsYXMgPSAxLCBjZXguYXhpcyA9IDEuNCwgYXQgPSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkbG9zcyksIGxhYmVscyA9IHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRsb3NzKSkKCiNzdHJpcGNoYXJ0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkbG9zcyB+IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkY29tbW9kaXR5LCB2ZXJ0aWNhbCA9IFRSVUUsICAKIyAgICBtZXRob2QgPSAiaml0dGVyIiwgYWRkID0gVFJVRSwgcGNoID0gMjAsIGNvbD11bmlxdWUoYXMubnVtZXJpYyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JHN0YXRlKSkgKQoKdGl0bGUoeGxhYj0iQ29tbW9kaXR5IiwgbGluZT0xMC41LCBjZXgubGFiID0gMS40KQp0aXRsZShtYWluPSJQTlcgaW5zdXJhbmNlIGxvc3MgcGVyIGFjcmUgYnkgY29tbW9kaXR5OiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCgpwYXIobWFyPWMoMTEuOCwgNi4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCgpib3hwbG90KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMyJGRhbWFnZWNhdXNlLCBjb2wgPSAnbGlnaHRibHVlJywgeWxhYiA9ICJJbnN1cmFuY2UgQ2FpbSBMb3NzIHBlciBBY3JlICgkKSIsICB5YXh0ID0gJ24nLCB4bGFiID0gIiIsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRkYW1hZ2VjYXVzZSwgbGFzID0gMywgY2V4Lm1haW4gPSAxLjUsIGNleC5sYWIgPSAxLjQsIGNleC5heGlzID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSwgb3V0bGluZSA9IEZBTFNFKQpheGlzKDIsIGxhcyA9IDEsIGNleC5heGlzID0gMS40LCBhdCA9IHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlczIkbG9zcyksIGxhYmVscyA9IHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlczIkbG9zcykpCgp0aXRsZSh4bGFiPSJEYW1hZ2UgQ2F1c2UiLCBsaW5lPTEwLjUsIGNleC5sYWIgPSAxLjQpCnRpdGxlKG1haW49IlBOVyBpbnN1cmFuY2UgbG9zcyBwZXIgYWNyZSBieSBkYW1hZ2UgY2F1c2U6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBhZGogPSAwLCBjZXgubWFpbiA9IDEuOSkKCgojbW9kZWxfY291bnQgPC0gZ2xtKGZvcm11bGEgPSBsb2cobG9zcykgfiBkYW1hZ2VjYXVzZSArIGNvbW1vZGl0eSwgZmFtaWx5ID0gInBvaXNzb24iLCBkYXRhID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCkKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc19iYXJwbG90IDwtIGFnZ3JlZ2F0ZShTb3V0aGVybl9JRF9zdW1sb3NzJGxvc3MsIGJ5ID0gbGlzdChTb3V0aGVybl9JRF9zdW1sb3NzJGNvbW1vZGl0eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfYmFycGxvdCkgPC0gYygiY29tbW9kaXR5IiwgImxvc3MiKQoKc3VtbG9zc19ub25wYWxvdXNlJHJlZ2lvbiA8LSAiUE5XIG1pbnVzIElQTlciCnN1bWxvc3NfcGFsb3VzZSRyZWdpb24gPC0gIklQTlciCnN1bWxvc3NfUE5XIDwtIHJiaW5kKHN1bWxvc3Nfbm9ucGFsb3VzZSwgc3VtbG9zc19wYWxvdXNlKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX2JhcnBsb3QgPC0gYWdncmVnYXRlKHN1bWxvc3NfUE5XJGxvc3MsIGJ5ID0gbGlzdChzdW1sb3NzX1BOVyRjb21tb2RpdHksIHN1bWxvc3NfUE5XJHJlZ2lvbiksIEZVTiA9ICJzdW0iKQoKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX2JhcnBsb3QpIDwtIGMoImNvbW1vZGl0eSIsICJyZWdpb24iLCAibG9zcyIpCgpwc2xiIDwtIGFnZ3JlZ2F0ZShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfYmFycGxvdCRsb3NzLCBieSA9IGxpc3QocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX2JhcnBsb3QkY29tbW9kaXR5KSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKHBzbGIpIDwtIGMoImNvbW1vZGl0eSIsICJsb3NzIikKcHNsYiA8LSBwc2xiW3dpdGgocHNsYiwgb3JkZXIobG9zcykpLCBdCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfYmFycGxvdCA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX2JhcnBsb3QsIGNvbW1vZGl0eSA9PSAiR1JBUEVTIiB8IGNvbW1vZGl0eSA9PSAiRFJZIFBFQVMiIHwgY29tbW9kaXR5ID09ICJCQVJMRVkiIHwgY29tbW9kaXR5ID09ICAiUE9UQVRPRVMiIHwgY29tbW9kaXR5ID09ICAiQVBQTEVTIiB8IGNvbW1vZGl0eSA9PSAiQ0hFUlJJRVMiIHwgY29tbW9kaXR5ID09ICJXSEVBVCIpCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc19iYXJwbG90KSA8LSBjKCJjb21tb2RpdHkiLCAicmVnaW9uIiwgImxvc3MiKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX2JhcnBsb3Rbd2l0aChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfYmFycGxvdCwgb3JkZXIobG9zcykpLCBdCgoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX2JhcnBsb3QkcmVnaW9uIDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfYmFycGxvdCRyZWdpb24sIGxldmVscyA9IGMoIlBOVyBtaW51cyBJUE5XIiwgIklQTlciKSkKcHRzIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfYmFycGxvdCRsb3NzIC8gMTAwMDAwMCkKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc19iYXJwbG90JGNvbW1vZGl0eSA8LSB0b2xvd2VyKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc19iYXJwbG90JGNvbW1vZGl0eSkKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX2JhcnBsb3QkY29tbW9kaXR5IDwtIHN0cmlfdHJhbnNfZ2VuZXJhbChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfYmFycGxvdCRjb21tb2RpdHksIGlkID0gIlRpdGxlIikKCmdncGxvdChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfYmFycGxvdCwgYWVzKGZpbGw9cmVnaW9uLCB5PWxvc3MsIHg9Y29tbW9kaXR5KSkgKyAKICAgIGdlb21fYmFyKCBzdGF0PSJpZGVudGl0eSIpICsgdGhlbWVfYncoKSArIHRoZW1lKHBhbmVsLmdyaWQubWFqb3I9ZWxlbWVudF9ibGFuaygpLHBhbmVsLmdyaWQubWlub3I9ZWxlbWVudF9ibGFuaygpKSArIGdndGl0bGUoIlBOVyB2cyBJUE5XIGxvc3MgdnMuIGNvbW1vZGl0eTogMjAwMSB0byAyMDE1IikgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xOCksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTgpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjkpLCBhbmdsZSA9IDkwLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpLCBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjkpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgdmp1c3QgPSAyKSkgICsgdGhlbWUobGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTQpKSArIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiwgZmFjZSA9ICJib2xkIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTI0LCBmYWNlID0gImJvbGQiKSkgKyBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSwgYnJlYWtzID0gcHRzICogMTAwMDAwMCApICsgeWxhYigiSW5zdXJhbmNlIENsYWltIExvc3MgKCQpIikgKyB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgc2NhbGVfZmlsbF9kaXNjcmV0ZShuYW1lID0gIkxlZ2VuZCIpCgoKCmBgYAoKPGJyPjwvYnI+CjxkaXYgYWxpZ249ImxlZnQiPgoKIVtdKGh0dHBzOi8vZG1pbmUuaW8vd2FmL2ltZy9TdGVwMS5wbmcpCgoKPGJyPjwvYnI+CjxkaXYgYWxpZ249ImxlZnQiPgoKIyNTdGVwIDU6IElQTlcgU3R1ZHkgQXJlYQoKPGRpdiBhbGlnbj0iY2VudGVyIj4KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXJyb3I9VFJVRSwgZWNobz1GQUxTRSwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA5fQoKbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KG1hcHRvb2xzKQpsaWJyYXJ5KGNsYXNzSW50KQpsaWJyYXJ5KGxlYWZsZXQpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocmFzdGVyKQpsaWJyYXJ5KGh0bWx0b29scykKIy0taXJyaWdhdGlvbiBhbmFseXNpcyAyMDE4CgoKI3NldHdkKCIvZG1pbmUvZGF0YS9jb3VudGllcy8iKQoKY291bnRpZXMgPC0gcmVhZFNoYXBlUG9seSgnL2RtaW5lL2RhdGEvY291bnRpZXMvdGhyZWVzdGF0ZV9wYWxvdXNlLnNocCcsCiAgICAgICAgICAgICAgICAgICAgIHByb2o0c3RyaW5nPUNSUwogICAgICAgICAgICAgICAgICAgICAoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpKQpwcm9qZWN0aW9uID0gQ1JTKCIrcHJvaj1sb25nbGF0ICtkYXR1bT1XR1M4NCArZWxscHM9V0dTODQgK3Rvd2dzODQ9MCwwLDAiKQoKI3BhbCA8LSBjb2xvck51bWVyaWMocGFsZXR0ZSA9IGMoIndoaXRlIiwgIm9yYW5nZSIsICJkYXJrb3JhbmdlIiwgInJlZCIsICJkYXJrcmVkIiksCiMgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9IGNvdW50aWVzJE5BTUUpCmV4dGUgPC0gYXMudmVjdG9yKGV4dGVudChjb3VudGllcykpCgojbGFiZWwgPC0gcGFzdGUoc2VwID0gIjxici8+IiwgY291bnRpZXMkTkFNRSwgcm91bmQoY291bnRpZXMkTkFNRSwgMCkpCiNtYXJrZXJzIDwtIGRhdGEuZnJhbWUobGFiZWwpCiNsYWJzIDwtIGFzLmxpc3QoY291bnRpZXMkTkFNRSkKCiNjb3VudGllcyA8LSBjb3VudGllc1tjb3VudGllcyROQU1FICE9ICJLb290ZW5haSIsXQojY291bnRpZXMgPC0gY291bnRpZXNbY291bnRpZXMkTkFNRSAhPSAiQ2xlYXJ3YXRlciIsXQoKCiAgICAgIGxhdF9sb25nIDwtIGNvb3JkaW5hdGVzKGNvdW50aWVzKQoKIGNvdW50aWVzX2EgPC0gZGF0YS5mcmFtZShjb3VudGllcykKICAgICAgbGFicyA8LSBsYXBwbHkoc2VxKG5yb3coY291bnRpZXNfYSkpLCBmdW5jdGlvbihpKSB7CiAgICAgICAgcGFzdGUwKGFzLmNoYXJhY3Rlcihjb3VudGllc19hW2ksICJOQU1FIl0pKQogICAgICB9KQoKI2xlYWZsZXQoZGF0YSA9IGNvdW50aWVzLCBvcHRpb25zID0gbGVhZmxldE9wdGlvbnMobWluWm9vbSA9IDYsIG1heFpvb20gPSA2KSkgJT4lICBhZGRQcm92aWRlclRpbGVzKCJTdGFtZW4uVG9uZXJMaXRlIikgJT4lIGZpdEJvdW5kcyhleHRlWzFdLCBleHRlWzNdLCBleHRlWzJdLCBleHRlWzRdKSAlPiUgYWRkUG9seWdvbnMoY29sb3IgPSAiYmx1ZSIsICB3ZWlnaHQgPSAxKSAlPiUKCiAgICAgIAojLS0KCgptYXB6IDwtIGxlYWZsZXQoZGF0YSA9IGNvdW50aWVzLCBvcHRpb25zID0gbGVhZmxldE9wdGlvbnMoem9vbVNuYXAgPSAuNCwgem9vbURlbHRhID0gLjQpKSAlPiUgIAogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJEh5ZGRhLkJhc2UpICU+JQogICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaW5lcykgJT4lIAogIAogCiAgCiAgZml0Qm91bmRzKGV4dGVbMV0sIGV4dGVbM10sIGV4dGVbMl0sIGV4dGVbNF0pICU+JSBhZGRQb2x5Z29ucyhjb2xvciA9ICJibHVlIiwgIHdlaWdodCA9IDEpICU+JQoKYWRkTGFiZWxPbmx5TWFya2VycyhkYXRhID0gY291bnRpZXMsIGxuZyA9IGxhdF9sb25nWywxXSwgbGF0ID0gbGF0X2xvbmdbLDJdLCBsYWJlbCA9IGxhcHBseShsYWJzLCBIVE1MKSwgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKHN0eWxlID0gbGlzdCgiZm9udC1mYW1pbHkiID0gInNlcmlmIiksIG5vSGlkZSA9IFRSVUUsIGRpcmVjdGlvbiA9ICdtaWRkbGUnLCB0ZXh0T25seSA9IFRSVUUsIHRleHRzaXplID0gIjE4cHgiLCBjb2xvciA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUsIGNvbCA9ICJ3aGl0ZSIpCikpIAogICAgICAgIAphZGRTY2FsZUJhcihtYXB6LCBwb3NpdGlvbiA9IGMoInRvcHJpZ2h0IiksIG9wdGlvbnMgPSBzY2FsZUJhck9wdGlvbnMoKSkKCgoKI21hcmtlck9wdGlvbnMobWFwLCByaXNlT25Ib3ZlciA9IFRSVUUpCiAjIGFkZExlZ2VuZChjb2xvcnMgPSB+TkFNRSwgbGFiZWxzID0gfk5BTUUsIHZhbHVlcyA9IH5OQU1FLCBvcGFjaXR5ID0gMC41LCB0aXRsZSA9IE5VTEwsCiAgIyAgICAgICAgICBwb3NpdGlvbiA9ICJib3R0b21yaWdodCIpCgoKYGBgCgoKPGJyPjwvYnI+CjxkaXYgYWxpZ249ImxlZnQiPgoKIVtdKGh0dHBzOi8vZG1pbmUuaW8vd2FmL2ltZy9TdGVwMS5wbmcpCgo8YnI+PC9icj4KPGRpdiBhbGlnbj0ibGVmdCI+CgojI1N0ZXAgNTogUHJpbmNpcGxlIENvbXBvbmVudHMgQW5hbHlzaXMgKFBDQSkKCkluIFN0ZXAgNSwgd2UgdXNlIHByaW5jaXBsZSBjb21wb25lbnRzIGFuYWx5c2lzIHRvIGV4YW1pbmUgdGhlIHZhcmlhdGlvbiBvZiBkYW1hZ2UgY2F1c2VzIGFuZCBjb21tb2RpdGllcywgYWNyb3NzIGNvdW50aWVzIGFuZCB5ZWFycy4gIAoKPGRpdiBhbGlnbj0iY2VudGVyIj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPVRSVUUsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gOX0KCmxpYnJhcnkoZ2dmb3J0aWZ5KQoKI1BOVyB1c2luZyBjb21tb2RpdHkgYXMgbG9hZGluZ3MKCiAgbGlicmFyeShyZXNoYXBlMikgOyBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF9jb21tb2RpdHkgPC0gZGNhc3QoUk1BX2RhbWFnZV9QTlcsIGNvdW50eSArIHN0YXRlIH4gY29tbW9kaXR5LCB2YWx1ZS52YXIgPSBjKCJsb3NzIiksIHN1bSkKUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfY29tbW9kaXR5JHN0YXRlY291bnR5IDwtIHBhc3RlKFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2NvbW1vZGl0eSRjb3VudHksICJfIiwgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfY29tbW9kaXR5JHN0YXRlLCBzZXA9IiIpCnJvd25hbWVzKFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2NvbW1vZGl0eSkgPC0gUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfY29tbW9kaXR5JHN0YXRlY291bnR5ClJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19jb21tb2RpdHkgPC0gUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfY29tbW9kaXR5WywzOjQxXQoKUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX2NvbW1vZGl0eSA8LSBSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfY29tbW9kaXR5Wy0xXQpSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfY29tbW9kaXR5IDwtIFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19jb21tb2RpdHlbLTIwXQpSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfY29tbW9kaXR5IDwtIFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19jb21tb2RpdHlbLTM3XQoKI1BOVyBkYW1hZ2UgY2F1c2UgYXMgbG9hZGluZ3MKCiAgbGlicmFyeShyZXNoYXBlMikgOyBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZCA8LSBkY2FzdChSTUFfZGFtYWdlX1BOVywgY291bnR5ICsgc3RhdGUgfiBkYW1hZ2VjYXVzZSwgdmFsdWUudmFyID0gYygibG9zcyIpLCBzdW0pClJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkJHN0YXRlY291bnR5IDwtIHBhc3RlKFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkJGNvdW50eSwgIl8iLCBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZCRzdGF0ZSwgc2VwPSIiKQpyb3duYW1lcyhSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZCkgPC0gUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWQkc3RhdGVjb3VudHkKUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzIDwtIFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkWywzOjMyXQoKI1BOVyBkYW1hZ2UgY2F1c2UgYXMgbG9hZGluZ3MgdXNpbmcgeWVhcnMgYXMgZ3JvdXBzCgogIGxpYnJhcnkocmVzaGFwZTIpIDsgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfeWVhciA8LSBkY2FzdChSTUFfZGFtYWdlX1BOVywgeWVhciB+IGRhbWFnZWNhdXNlLCB2YWx1ZS52YXIgPSBjKCJsb3NzIiksIHN1bSkKI1JNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX3llYXIkc3RhdGVjb3VudHkgPC0gcGFzdGUoUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfeWVhciRjb3VudHksICJfIiwgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfeWVhciRzdGF0ZSwgc2VwPSIiKQpyb3duYW1lcyhSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF95ZWFyKSA8LSBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF95ZWFyJHllYXIKUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3llYXIgPC0gUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfeWVhclssMjozMV0KCiNQTlcgZGFtYWdlIGNhdXNlIGFzIGxvYWRpbmdzIHVzaW5nIHllYXJzIGFzIGdyb3VwcywgSlVTVCBGT1IgV0hFQVQKClJNQV9kYW1hZ2VfUE5XX3doZWF0X3llYXIgPC0gc3Vic2V0KFJNQV9kYW1hZ2VfUE5XLCBjb21tb2RpdHkgPT0gIldIRUFUIikKICBsaWJyYXJ5KHJlc2hhcGUyKSA7IFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX3doZWF0X3llYXIgPC0gZGNhc3QoUk1BX2RhbWFnZV9QTldfd2hlYXRfeWVhciwgeWVhciB+IGRhbWFnZWNhdXNlLCB2YWx1ZS52YXIgPSBjKCJsb3NzIiksIHN1bSkKI1JNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX3llYXIkc3RhdGVjb3VudHkgPC0gcGFzdGUoUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfeWVhciRjb3VudHksICJfIiwgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfeWVhciRzdGF0ZSwgc2VwPSIiKQpyb3duYW1lcyhSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF93aGVhdF95ZWFyKSA8LSBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF93aGVhdF95ZWFyJHllYXIKUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3doZWF0X3llYXIgPC0gUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfd2hlYXRfeWVhcgoKI0lQTlcgZGFtYWdlIGNhdXNlIGFzIGxvYWRpbmdzIHVzaW5nIHllYXJzIGFzIGdyb3VwcwoKIGxpYnJhcnkocmVzaGFwZTIpIDsgUk1BX2RhbWFnZV9JUE5XX3RyYW5zZm9ybWVkX3llYXIgPC0gZGNhc3QoUk1BX2RhbWFnZV9JUE5XLCB5ZWFyIH4gZGFtYWdlY2F1c2UsIHZhbHVlLnZhciA9IGMoImxvc3MiKSwgc3VtKQojUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfeWVhciRzdGF0ZWNvdW50eSA8LSBwYXN0ZShSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF95ZWFyJGNvdW50eSwgIl8iLCBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF95ZWFyJHN0YXRlLCBzZXA9IiIpCnJvd25hbWVzKFJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZF95ZWFyKSA8LSBSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfeWVhciR5ZWFyClJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfeWVhciA8LSBSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfeWVhclssMjoyOF0KCiNQTlcgZGFtYWdlIGNhdXNlIGFzIGxvYWRpbmdzIHVzaW5nIG1vbnRocyBhcyBncm91cHMKCiNyZW1vdmUgbmVnYXRpdmVzIHJlbGF0ZWQgdG8gbG9zc3BlcmFjcmUgY2FsYwpSTUFfUE5XX25vbmVnIDwtIHN1YnNldChSTUFfUE5XLCBsb3NzcGVyYWNyZSAhPSBJbmYpClJNQV9QTldfbm9uZWcyIDwtIHN1YnNldChSTUFfUE5XX25vbmVnLCBsb3NzcGVyYWNyZSA+PTAgKQpSTUFfUE5XX25vbmVnMyA8LSBzdWJzZXQoUk1BX1BOV19ub25lZzIsIG1vbnRoICE9IiIgKQoKCgogIGxpYnJhcnkocmVzaGFwZTIpIDsgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfbW9udGggPC0gZGNhc3QoUk1BX1BOV19ub25lZzMsIG1vbnRoIH4gZGFtYWdlY2F1c2UsIHZhbHVlLnZhciA9IGMoImxvc3MiKSwgbWVhbikKCmlzLm5hbi5kYXRhLmZyYW1lIDwtIGZ1bmN0aW9uKHgpCmRvLmNhbGwoY2JpbmQsIGxhcHBseSh4LCBpcy5uYW4pKQoKUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfbW9udGhbaXMubmFuKFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX21vbnRoKV0gPC0gMAoKI1JNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX3llYXIkc3RhdGVjb3VudHkgPC0gcGFzdGUoUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfeWVhciRjb3VudHksICJfIiwgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfeWVhciRzdGF0ZSwgc2VwPSIiKQpyb3duYW1lcyhSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF9tb250aCkgPC0gUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfbW9udGgkbW9udGgKUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX21vbnRoIDwtIFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX21vbnRoWywyOjMxXQoKI1BOVyB3aGVhdAoKUk1BX2RhbWFnZV9QTldfd2hlYXQgPC0gc3Vic2V0KFJNQV9kYW1hZ2VfUE5XLCBjb21tb2RpdHkgPT0gIldIRUFUIikKCmxpYnJhcnkocmVzaGFwZTIpIDsgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfd2hlYXQgPC0gZGNhc3QoUk1BX2RhbWFnZV9QTldfd2hlYXQsIGNvdW50eSArIHN0YXRlIH4gZGFtYWdlY2F1c2UsIHZhbHVlLnZhciA9IGMoImxvc3MiKSwgc3VtKQpSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF93aGVhdCRzdGF0ZWNvdW50eSA8LSBwYXN0ZShSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF93aGVhdCRjb3VudHksICJfIiwgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfd2hlYXQkc3RhdGUsIHNlcD0iIikKcm93bmFtZXMoUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfd2hlYXQpIDwtIFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX3doZWF0JHN0YXRlY291bnR5ClJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c193aGVhdCA8LSBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF93aGVhdFssMzoyN10KCiNQTlcgYXBwbGVzCgpSTUFfZGFtYWdlX1BOV19hcHBsZXMgPC0gc3Vic2V0KFJNQV9kYW1hZ2VfUE5XLCBjb21tb2RpdHkgPT0gIkFQUExFUyIpCgogIGxpYnJhcnkocmVzaGFwZTIpIDsgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfYXBwbGVzIDwtIGRjYXN0KFJNQV9kYW1hZ2VfUE5XX2FwcGxlcywgY291bnR5ICsgc3RhdGUgfiBkYW1hZ2VjYXVzZSwgdmFsdWUudmFyID0gYygibG9zcyIpLCBzdW0pClJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2FwcGxlcyRzdGF0ZWNvdW50eSA8LSBwYXN0ZShSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF9hcHBsZXMkY291bnR5LCAiXyIsIFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2FwcGxlcyRzdGF0ZSwgc2VwPSIiKQpyb3duYW1lcyhSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF9hcHBsZXMpIDwtIFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2FwcGxlcyRzdGF0ZWNvdW50eQpSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfYXBwbGVzIDwtIFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2FwcGxlc1ssMzoyNF0KCiNQTlcgYmFybGV5CgpSTUFfZGFtYWdlX1BOV19iYXJsZXkgPC0gc3Vic2V0KFJNQV9kYW1hZ2VfUE5XLCBjb21tb2RpdHkgPT0gIkJBUkxFWSIpCgogIGxpYnJhcnkocmVzaGFwZTIpIDsgUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfYmFybGV5IDwtIGRjYXN0KFJNQV9kYW1hZ2VfUE5XX2JhcmxleSwgY291bnR5ICsgc3RhdGUgfiBkYW1hZ2VjYXVzZSwgdmFsdWUudmFyID0gYygibG9zcyIpLCBzdW0pClJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2JhcmxleSRzdGF0ZWNvdW50eSA8LSBwYXN0ZShSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF9iYXJsZXkkY291bnR5LCAiXyIsIFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2JhcmxleSRzdGF0ZSwgc2VwPSIiKQpyb3duYW1lcyhSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF9iYXJsZXkpIDwtIFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2JhcmxleSRzdGF0ZWNvdW50eQpSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfYmFybGV5IDwtIFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2JhcmxleVssMzoyM10KCiNqdXN0IHRoZSBJUE5XCgpSTUFfZGFtYWdlX0lQTlckbG9nMTBsb3NzIDwtIGxvZzEwKFJNQV9kYW1hZ2VfSVBOVyRsb3NzKQoKIGxpYnJhcnkocmVzaGFwZTIpIDsgUk1BX2RhbWFnZV9JUE5XX3RyYW5zZm9ybWVkIDwtIGRjYXN0KFJNQV9kYW1hZ2VfSVBOVywgY291bnR5ICsgc3RhdGUgfiBkYW1hZ2VjYXVzZSwgdmFsdWUudmFyID0gYygibG9zcyIpLCBzdW0pClJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZCRzdGF0ZWNvdW50eSA8LSBwYXN0ZShSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWQkY291bnR5LCAiXyIsIFJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZCRzdGF0ZSwgc2VwPSIiKQpyb3duYW1lcyhSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWQpIDwtIFJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZCRzdGF0ZWNvdW50eQpSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzIDwtIFJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZFssMzoyOV0KCiNqdXN0IElQTlcgd2l0aCB0aW1lIGluY2x1ZGVkIAoKbGlicmFyeShyZXNoYXBlMikgOyBSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfd2l0aHRpbWUgPC0gZGNhc3QoUk1BX2RhbWFnZV9JUE5XLCB5ZWFyICsgY291bnR5ICsgc3RhdGUgfiBkYW1hZ2VjYXVzZSwgdmFsdWUudmFyID0gYygibG9zcyIpLCBzdW0pClJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZF93aXRodGltZSRzdGF0ZWNvdW50eSA8LSBwYXN0ZShSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfd2l0aHRpbWUkY291bnR5LCAiXyIsIFJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZF93aXRodGltZSRzdGF0ZSwgIl8iLCBSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfd2l0aHRpbWUkeWVhciwgIHNlcD0iIikKcm93bmFtZXMoUk1BX2RhbWFnZV9JUE5XX3RyYW5zZm9ybWVkX3dpdGh0aW1lKSA8LSBSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfd2l0aHRpbWUkc3RhdGVjb3VudHkKUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c193aXRodGltZSA8LSBjYmluZChSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfd2l0aHRpbWVbLDFdLCBSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfd2l0aHRpbWVbLDQ6MzFdKQoKI2p1c3QgdGhlIElQTlcgMjAxNQoKUk1BX2RhbWFnZV9JUE5XXzIwMTUgPC0gc3Vic2V0KFJNQV9kYW1hZ2VfSVBOVywgeWVhciA9PSAyMDA5KQoKIGxpYnJhcnkocmVzaGFwZTIpIDsgUk1BX2RhbWFnZV9JUE5XX3RyYW5zZm9ybWVkXzIwMTUgPC0gZGNhc3QoUk1BX2RhbWFnZV9JUE5XXzIwMTUsIGNvdW50eSArIHN0YXRlIH4gZGFtYWdlY2F1c2UsIHZhbHVlLnZhciA9IGMoImxvc3MiKSwgc3VtKQpSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfMjAxNSRzdGF0ZWNvdW50eSA8LSBwYXN0ZShSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfMjAxNSRjb3VudHksICJfIiwgUk1BX2RhbWFnZV9JUE5XX3RyYW5zZm9ybWVkXzIwMTUkc3RhdGUsIHNlcD0iIikKcm93bmFtZXMoUk1BX2RhbWFnZV9JUE5XX3RyYW5zZm9ybWVkXzIwMTUpIDwtIFJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZF8yMDE1JHN0YXRlY291bnR5ClJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfMjAxNSA8LSBSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfMjAxNVssMzoyMV0KCgoKI2FsbCBQTlcgYnkgZGFtYWdlCnBhcihtYXI9Yyg4LCA2LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDQsIDEsIDApLCBsYXM9MCkKCmZpdCA8LSBwcmluY29tcChSTUFfZGFtYWdlX1BOV19leG9nZW5vdXMsIGNvcj1UUlVFKQphdXRvcGxvdChwcmNvbXAoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzLCBjZW50ZXIgPSBUUlVFLCBzY2FsZSA9IFRSVUUpLCBmcmFtZSA9IFRSVUUsIGZyYW1lLnR5cGUgPSAnbm9ybScsIGRhdGEgPSBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZCwgY29sb3VyID0gJ3N0YXRlJywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDIsIGxlZ2VuZCA9IEZBTFNFKSAgKyB0aGVtZV9idygpICAgKyBnZW9tX3RleHQodmp1c3Q9LTEsIGxhYmVsPXJvd25hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91cykpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArIGdndGl0bGUoIlByaW5jaXBsZSBDb21wb25lbnRzOiBJUE5XIGluc3VyYW5jZSBsb3NzIGJ5IGNvdW50eVxud2l0aCBkYW1hZ2UgY2F1c2UgbG9hZGluZ3M6IDIwMDEgdG8gMjAxNSIpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0yOCwgZmFtaWx5ID0gIlNlcmlmIikpICsgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTYpLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZSA9IDE2KSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSwgaGp1c3QgPSAxLCBmYW1pbHkgPSAiU2VyaWYiKSwgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSwgaGp1c3QgPSAxLCBmYW1pbHkgPSAiU2VyaWYiKSkKCnBhcihtYXI9Yyg4LCA2LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDQsIDEsIDApLCBsYXM9MCkKCiNQTlcgdXNpbmcgeWVhciBhcyBncm91cCAtIHdpdGggZGFtYWdlIGNhdXNlIGFzIGxvYWRpbmdzCiNmaXQgPC0gcHJpbmNvbXAoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3llYXIsIGNvcj1UUlVFLCBzY2FsZSA9IFRSVUUsIGNlbnRlciA9IFRSVUUpCgpSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfeWVhcl9mYWN0b3IgPC0gY2JpbmQoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3llYXJbLDI6M10sIFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c195ZWFyWzZdLCBSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfeWVhcls4XSwgUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3llYXJbLDExOjE0XSwgUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3llYXJbMTY6MTddKQoKYXV0b3Bsb3QocHJjb21wKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c195ZWFyX2ZhY3RvciwgY2VudGVyID0gVFJVRSwgc2NhbGUgPSBUUlVFKSwgIGRhdGEgPSBSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfeWVhcl9mYWN0b3IsIGNvbG91ciA9IHJvd25hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c195ZWFyX2ZhY3RvciksIGxvYWRpbmdzID0gVFJVRSwgbG9hZGluZ3MubGFiZWwgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbC5zaXplICA9IDMsIGxhYmVsID0gRkFMU0UsIGxhYmVsLnNpemUgPSAyLCBsZWdlbmQgPSBGQUxTRSkgICsgdGhlbWVfYncoKSAgICsgZ2VvbV90ZXh0KHZqdXN0PS0xLCBsYWJlbD1yb3duYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfeWVhcl9mYWN0b3IpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyBnZ3RpdGxlKCJQcmluY2lwbGUgQ29tcG9uZW50czogUE5XIGluc3VyYW5jZSBsb3NzLCBieSB5ZWFyXG53aXRoIGRhbWFnZSBjYXVzZSBsb2FkaW5ncyAiKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9MjgsIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIiksIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIikpCgoKCnBhcihtYXI9Yyg4LCA2LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDQsIDEsIDApLCBsYXM9MCkKCiNQTlcgdXNpbmcgeWVhciBhcyBncm91cCAtIHdpdGggZGFtYWdlIGNhdXNlIGFzIGxvYWRpbmdzOiBKVVNUIEZPUiBXSEVBVAojZml0IDwtIHByaW5jb21wKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c195ZWFyLCBjb3I9VFJVRSwgc2NhbGUgPSBUUlVFLCBjZW50ZXIgPSBUUlVFKQoKUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3doZWF0X3llYXJfZmFjdG9yIDwtIGNiaW5kKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c193aGVhdF95ZWFyWywzOjRdLCBSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfd2hlYXRfeWVhcls3XSwgUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3doZWF0X3llYXJbOV0sIFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c193aGVhdF95ZWFyWywxMjoxNV0sIFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c193aGVhdF95ZWFyWzE3OjE4XSkKCmF1dG9wbG90KHByY29tcChSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfd2hlYXRfeWVhcl9mYWN0b3IsIGNlbnRlciA9IFRSVUUsIHNjYWxlID0gVFJVRSksICBkYXRhID0gUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3doZWF0X3llYXJfZmFjdG9yLCBjb2xvdXIgPSByb3duYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfd2hlYXRfeWVhcl9mYWN0b3IpLCBsb2FkaW5ncyA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsID0gVFJVRSwgbG9hZGluZ3MubGFiZWwuc2l6ZSAgPSAzLCBsYWJlbCA9IEZBTFNFLCBsYWJlbC5zaXplID0gMiwgbGVnZW5kID0gRkFMU0UpICArIHRoZW1lX2J3KCkgICArIGdlb21fdGV4dCh2anVzdD0tMSwgbGFiZWw9cm93bmFtZXMoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3doZWF0X3llYXJfZmFjdG9yKSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsgZ2d0aXRsZSgiUHJpbmNpcGxlIENvbXBvbmVudHM6IFBOVyBXSEVBVCBpbnN1cmFuY2UgbG9zcywgYnkgeWVhclxud2l0aCBkYW1hZ2UgY2F1c2UgbG9hZGluZ3MgIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPTI4LCBmYW1pbHkgPSAiU2VyaWYiKSkgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpLCBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpKQoKCgoKI2F1dG9wbG90KHByY29tcChSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfeWVhciwgY2VudGVyID0gVFJVRSwgc2NhbGUgPSBUUlVFKSwgZGF0YSA9IFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX3llYXIsIGNvbG91ciA9ICd5ZWFyJywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDMsIGxlZ2VuZCA9IEZBTFNFKSArIGdlb21fdGV4dCh2anVzdD0tMSwgbGFiZWw9cm93bmFtZXMoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3llYXIpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKCiNQTlcgdXNpbmcgbW9udGggYXMgZ3JvdXAgLSB3aXRoIGRhbWFnZSBjYXVzZSBhcyBsb2FkaW5ncwojZml0IDwtIHByaW5jb21wKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19tb250aCwgY29yPVRSVUUsIHNjYWxlID0gVFJVRSwgY2VudGVyID0gVFJVRSkKYXV0b3Bsb3QocHJjb21wKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19tb250aCwgY2VudGVyID0gVFJVRSwgc2NhbGUgPSBUUlVFKSwgIGRhdGEgPSBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF9tb250aCwgY29sb3VyID0gJ21vbnRoJywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDIsIGxlZ2VuZCA9IEZBTFNFKSAgKyB0aGVtZV9idygpICAgKyBnZW9tX3RleHQodmp1c3Q9LTEsIGxhYmVsPXJvd25hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19tb250aCkpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArIGdndGl0bGUoIlByaW5jaXBsZSBDb21wb25lbnRzOiBQTlcgaW5zdXJhbmNlIGxvc3MsIGJ5IG1vbnRoXG53aXRoIGRhbWFnZSBjYXVzZSBsb2FkaW5ncyAiKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9MjgsIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIiksIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIikpCgoKCiNhdXRvcGxvdChwcmNvbXAoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX21vbnRoKSwgZGF0YSA9IFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX21vbnRoLCBjb2xvdXIgPSAnbW9udGgnLCBsb2FkaW5ncyA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsID0gVFJVRSwgbG9hZGluZ3MubGFiZWwuc2l6ZSAgPSAzLCBsYWJlbCA9IEZBTFNFLCBsYWJlbC5zaXplID0gMywgbGVnZW5kID0gRkFMU0UpICsgZ2VvbV90ZXh0KHZqdXN0PS0xLCBsYWJlbD1yb3duYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfbW9udGgpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKCiNQTlcgd2hlYXQKCmZpdCA8LSBwcmluY29tcChSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfd2hlYXQsIGNvcj1UUlVFKQojYXV0b3Bsb3QocHJjb21wKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c193aGVhdCwgc2NhbGUgPSBUUlVFLCBjZW50ZXIgPSBUUlVFKSwgZGF0YSA9IFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX3doZWF0LCBjb2xvdXIgPSAnY291bnR5JywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDMsIGxlZ2VuZCA9IEZBTFNFKSArIGdlb21fdGV4dCh2anVzdD0tMSwgbGFiZWw9cm93bmFtZXMoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3doZWF0KSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCgphdXRvcGxvdChwcmNvbXAoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3doZWF0LCBjZW50ZXIgPSBUUlVFLCBzY2FsZSA9IFRSVUUpLCBmcmFtZSA9IFRSVUUsIGZyYW1lLnR5cGUgPSAnbm9ybScsIGRhdGEgPSBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF93aGVhdCwgY29sb3VyID0gJ3N0YXRlJywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDIsIGxlZ2VuZCA9IEZBTFNFKSAgKyB0aGVtZV9idygpICAgKyBnZW9tX3RleHQodmp1c3Q9LTEsIGxhYmVsPXJvd25hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c193aGVhdCkpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArIGdndGl0bGUoIlByaW5jaXBsZSBDb21wb25lbnRzOiBQTlcgd2hlYXQgaW5zdXJhbmNlIGxvc3MsIGJ5IGNvdW50eVxud2l0aCBkYW1hZ2UgY2F1c2UgbG9hZGluZ3MgIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPTI4LCBmYW1pbHkgPSAiU2VyaWYiKSkgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpLCBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpKQoKCiNQTlcgYXBwbGVzCgojYXV0b3Bsb3QocHJjb21wKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19hcHBsZXMpLCBkYXRhID0gUk1BX2RhbWFnZV9QTldfdHJhbnNmb3JtZWRfYXBwbGVzLCBjb2xvdXIgPSAnY291bnR5JywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDMsIGxlZ2VuZCA9IEZBTFNFKSArIGdlb21fdGV4dCh2anVzdD0tMSwgbGFiZWw9cm93bmFtZXMoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX2FwcGxlcykpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQoKYXV0b3Bsb3QocHJjb21wKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19hcHBsZXMsIGNlbnRlciA9IFRSVUUsIHNjYWxlID0gVFJVRSksIGZyYW1lID0gVFJVRSwgZnJhbWUudHlwZSA9ICdub3JtJywgZGF0YSA9IFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2FwcGxlcywgY29sb3VyID0gJ3N0YXRlJywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDIsIGxlZ2VuZCA9IEZBTFNFKSAgKyB0aGVtZV9idygpICAgKyBnZW9tX3RleHQodmp1c3Q9LTEsIGxhYmVsPXJvd25hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19hcHBsZXMpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyBnZ3RpdGxlKCJQcmluY2lwbGUgQ29tcG9uZW50czogUE5XIGFwcGxlcyBpbnN1cmFuY2UgbG9zcywgYnkgY291bnR5XG53aXRoIGRhbWFnZSBjYXVzZSBsb2FkaW5ncyAiKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9MjgsIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIiksIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIikpCgojUE5XIGJhcmxleQoKI2F1dG9wbG90KHByY29tcChSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfYmFybGV5KSwgZGF0YSA9IFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2JhcmxleSwgY29sb3VyID0gJ2NvdW50eScsIGxvYWRpbmdzID0gVFJVRSwgbG9hZGluZ3MubGFiZWwgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbC5zaXplICA9IDMsIGxhYmVsID0gRkFMU0UsIGxhYmVsLnNpemUgPSAzLCBsZWdlbmQgPSBGQUxTRSkgKyBnZW9tX3RleHQodmp1c3Q9LTEsIGxhYmVsPXJvd25hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19iYXJsZXkpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKCmF1dG9wbG90KHByY29tcChSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfYmFybGV5LCBjZW50ZXIgPSBUUlVFLCBzY2FsZSA9IFRSVUUpLCBmcmFtZSA9IFRSVUUsIGZyYW1lLnR5cGUgPSAnbm9ybScsIGRhdGEgPSBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF9iYXJsZXksIGNvbG91ciA9ICdzdGF0ZScsIGxvYWRpbmdzID0gVFJVRSwgbG9hZGluZ3MubGFiZWwgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbC5zaXplICA9IDMsIGxhYmVsID0gRkFMU0UsIGxhYmVsLnNpemUgPSAyLCBsZWdlbmQgPSBGQUxTRSkgICsgdGhlbWVfYncoKSAgICsgZ2VvbV90ZXh0KHZqdXN0PS0xLCBsYWJlbD1yb3duYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfYmFybGV5KSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsgZ2d0aXRsZSgiUHJpbmNpcGxlIENvbXBvbmVudHM6IFBOVyBiYXJsZXkgaW5zdXJhbmNlIGxvc3MsIGJ5IGNvdW50eVxud2l0aCBkYW1hZ2UgY2F1c2UgbG9hZGluZ3MgIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPTI4LCBmYW1pbHkgPSAiU2VyaWYiKSkgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpLCBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpKQoKCiNQTlcgYnkgY29tbW9kaXR5CgpmaXQgPC0gcHJpbmNvbXAoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX2NvbW1vZGl0eSwgY29yPVRSVUUpCiNhdXRvcGxvdChwcmNvbXAoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX2NvbW1vZGl0eSwgc2NhbGUgPSBUUlVFLCBjZW50ZXIgPSBUUlVFKSwgZGF0YSA9IFJNQV9kYW1hZ2VfUE5XX3RyYW5zZm9ybWVkX2NvbW1vZGl0eSwgY29sb3VyID0gJ2NvdW50eScsIGxvYWRpbmdzID0gVFJVRSwgbG9hZGluZ3MubGFiZWwgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbC5zaXplICA9IDMsIGxhYmVsID0gRkFMU0UsIGxhYmVsLnNpemUgPSAzLCBsZWdlbmQgPSBGQUxTRSkgKyBnZW9tX3RleHQodmp1c3Q9LTEsIGxhYmVsPXJvd25hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c19jb21tb2RpdHkpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKCmF1dG9wbG90KHByY29tcChSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfY29tbW9kaXR5LCBjZW50ZXIgPSBUUlVFLCBzY2FsZSA9IFRSVUUpLCBmcmFtZSA9IFRSVUUsIGZyYW1lLnR5cGUgPSAnbm9ybScsIGRhdGEgPSBSTUFfZGFtYWdlX1BOV190cmFuc2Zvcm1lZF9jb21tb2RpdHksIGNvbG91ciA9ICdzdGF0ZScsIGxvYWRpbmdzID0gVFJVRSwgbG9hZGluZ3MubGFiZWwgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbC5zaXplICA9IDMsIGxhYmVsID0gRkFMU0UsIGxhYmVsLnNpemUgPSAyLCBsZWdlbmQgPSBGQUxTRSkgICsgdGhlbWVfYncoKSAgICsgZ2VvbV90ZXh0KHZqdXN0PS0xLCBsYWJlbD1yb3duYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfY29tbW9kaXR5KSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsgZ2d0aXRsZSgiUHJpbmNpcGxlIENvbXBvbmVudHM6IFBOVyBpbnN1cmFuY2UgbG9zcywgYnkgY291bnR5IFxud2l0aCBjb21tb2RpdHkgbG9hZGluZ3MgIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPTI4LCBmYW1pbHkgPSAiU2VyaWYiKSkgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpLCBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpKQoKCiNJUE5XCgojUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91cyA8LSBzY2FsZShSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzLCBzY2FsZSA9IFRSVUUsIGNlbnRlciA9IFRSVUUpCnBjYV9STUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzIDwtIHByY29tcChSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzLCBzY2FsZSA9IFRSVUUsIGNlbnRlciA9IFRSVUUpCgphdXRvcGxvdChwcmNvbXAoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3IsIHNjYWxlID0gVFJVRSwgY2VudGVyID0gVFJVRSksIGZyYW1lID0gVFJVRSwgZnJhbWUudHlwZSA9ICdub3JtJywgZGF0YSA9IFJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZCwgY29sb3VyID0gJ3N0YXRlJywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDIsIGxlZ2VuZCA9IEZBTFNFKSAgKyB0aGVtZV9idygpICAgKyBnZW9tX3RleHQodmp1c3Q9LTEsIGxhYmVsPXJvd25hbWVzKFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXMpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyBnZ3RpdGxlKCJQcmluY2lwbGUgQ29tcG9uZW50czogSVBOVyBpbnN1cmFuY2UgbG9zcywgYnkgY291bnR5XG53aXRoIGRhbWFnZSBjYXVzZSBsb2FkaW5ncyAiKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9MjgsIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIiksIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIikpCgojSVBOVyB3aXRoIHllYXJzIGFzIHRoZSBncm91cAoKYXV0b3Bsb3QocHJjb21wKFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfeWVhciwgY2VudGVyID0gVFJVRSwgc2NhbGUgPSBUUlVFKSwgZGF0YSA9IFJNQV9kYW1hZ2VfSVBOV190cmFuc2Zvcm1lZF95ZWFyLCBsb2FkaW5ncyA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsID0gVFJVRSwgbG9hZGluZ3MubGFiZWwuc2l6ZSAgPSAzLCBsYWJlbCA9IEZBTFNFLCBsYWJlbC5zaXplID0gMiwgbGVnZW5kID0gRkFMU0UpICArIHRoZW1lX2J3KCkgICsgZ2VvbV90ZXh0KHZqdXN0PS0xLCBsYWJlbD1yb3duYW1lcyhSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX3llYXIpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyBnZ3RpdGxlKCJQcmluY2lwbGUgQ29tcG9uZW50czogSVBOVyBpbnN1cmFuY2UgbG9zcywgYnkgeWVhclxud2l0aCBkYW1hZ2UgY2F1c2UgbG9hZGluZ3MsIGdyb3VwZWQgYnkgQWcgUmVnaW9uIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPTI4LCBmYW1pbHkgPSAiU2VyaWYiKSkgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpLCBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpKQoKI2F1dG9wbG90KHByY29tcChSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzLCBzY2FsZSA9IFRSVUUsIGNlbnRlciA9IFRSVUUpLCBkYXRhID0gUk1BX2RhbWFnZV9JUE5XX3RyYW5zZm9ybWVkLCBjb2xvdXIgPSAnY291bnR5JywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDMsIGxlZ2VuZCA9IEZBTFNFKSArIGdlb21fdGV4dCh2anVzdD0tMSwgbGFiZWw9cm93bmFtZXMoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91cykpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQoKI0lQTlcgMjAxNQoKI1JNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXMgPC0gc2NhbGUoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91cywgc2NhbGUgPSBUUlVFLCBjZW50ZXIgPSBUUlVFKQpwY2FfUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c18yMDE1IDwtIHByY29tcChSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzXzIwMTUsIHNjYWxlID0gVFJVRSwgY2VudGVyID0gVFJVRSkKI2F1dG9wbG90KHByY29tcChSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzXzIwMTUsIHNjYWxlID0gVFJVRSwgY2VudGVyID0gVFJVRSksIGRhdGEgPSBSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfMjAxNSwgY29sb3VyID0gJ3N0YXRlJywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDMsIGxlZ2VuZCA9IEZBTFNFKSArIGdlb21fdGV4dCh2anVzdD0tMSwgbGFiZWw9cm93bmFtZXMoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c18yMDE1KSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCgphdXRvcGxvdChwcmNvbXAoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c18yMDE1LCBjZW50ZXIgPSBUUlVFLCBzY2FsZSA9IFRSVUUpLCBmcmFtZSA9IFRSVUUsIGZyYW1lLnR5cGUgPSAnbm9ybScsIGRhdGEgPSBSTUFfZGFtYWdlX0lQTldfdHJhbnNmb3JtZWRfMjAxNSwgY29sb3VyID0gJ3N0YXRlJywgbG9hZGluZ3MgPSBUUlVFLCBsb2FkaW5ncy5sYWJlbCA9IFRSVUUsIGxvYWRpbmdzLmxhYmVsLnNpemUgID0gMywgbGFiZWwgPSBGQUxTRSwgbGFiZWwuc2l6ZSA9IDIsIGxlZ2VuZCA9IEZBTFNFKSAgKyB0aGVtZV9idygpICAgKyBnZW9tX3RleHQodmp1c3Q9LTEsIGxhYmVsPXJvd25hbWVzKFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfMjAxNSkpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArIGdndGl0bGUoIlByaW5jaXBsZSBDb21wb25lbnRzOiAyMDE1IElQTlcgaW5zdXJhbmNlIGxvc3MsIGJ5IGNvdW50eVxud2l0aCBkYW1hZ2UgY2F1c2UgbG9hZGluZ3MiKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9MjgsIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIiksIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIikpCgojcGNhX1JNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXMkcm90YXRpb24KCiNwbG90KHBjYV9STUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzJHJvdGF0aW9uKQoKc3RkX2RldiA8LSBwY2FfUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91cyRzZGV2Cgpwcl92YXIgPC0gc3RkX2Rldl4yCgpwcl92YXJbMToxMF0KCnByb3BfdmFyZXggPC0gcHJfdmFyL3N1bShwcl92YXIpCgpwbG90KHByb3BfdmFyZXgsIHhsYWIgPSAiUHJpbmNpcGFsIENvbXBvbmVudCIsCiAgICAgICAgICAgICB5bGFiID0gIlByb3BvcnRpb24gb2YgVmFyaWFuY2UgRXhwbGFpbmVkIiwKICAgICAgICAgICAgIHR5cGUgPSAiYiIpCgpwbG90KGN1bXN1bShwcm9wX3ZhcmV4KSwgeGxhYiA9ICJQcmluY2lwYWwgQ29tcG9uZW50IiwKICAgICAgICAgICAgICB5bGFiID0gIkN1bXVsYXRpdmUgUHJvcG9ydGlvbiBvZiBWYXJpYW5jZSBFeHBsYWluZWQiLAogICAgICAgICAgICAgIHR5cGUgPSAiYiIpCgp0b3BOIDwtIDE1CmxvYWQucm90IDwtIHBjYV9STUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzJHJvdGF0aW9uCm5hbWVzKGxvYWQucm90WywxXVtvcmRlcihhYnMobG9hZC5yb3RbLDFdKSxkZWNyZWFzaW5nPVRSVUUpXVsxOnRvcE5dKQoKCiNuYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXMpIDwtIGdzdWIoIiAiLCAiXyIsIG5hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91cykpCiNuYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXMpIDwtIGdzdWIoIi8iLCAiXyIsIG5hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91cykpCiNuYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXMpIDwtIGdzdWIoIlxcKCIsICIiLCBuYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXMpKQojbmFtZXMoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzKSA8LSBnc3ViKCIpIiwgIiIsIG5hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91cykpCiNuYW1lcyhSTUFfZGFtYWdlX1BOV19leG9nZW5vdXMpIDwtIGdzdWIoIi0iLCAiXyIsIG5hbWVzKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91cykpCgoKI2ZhY3RvciBhbmFseXNpcyBvbiBJUE5XIGRhdGEKCiNudW1iZXIgb2YgZmFjdG9ycyB0byB1c2UuICBJbml0aWFsbHkgbGltaXQgdGhlIG51bWJlciBvZiBmYWN0b3JzIHRvIHRoZSB0b3AgZGFtYWdlIGNhdXNlcyB3aXRoIHRoZSBtb3N0IGFtb3VudHMgb2YgbG9zcwoKUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3IgPC0gY2JpbmQoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c1syOjNdLCBSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzWzU6Nl0sIFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNbOF0sIFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNbMTFdLCBSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzWzEzOjE0XSwgUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c1sxNjoxN10pCgoKbGlicmFyeShDQ0EpCgojQ0NBLWJ5X3N0YXRlY291bnR5LS0tLS0tCgpSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl93ZXQgPC0gY2JpbmQoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3JbMToyXSwgUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3JbNV0sIFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yWzc6OV0pCgpSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl9kcnkgPC0gY2JpbmQoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3JbNF0sIFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yWzEwXSkKCgpjYzEgPC0gY2MoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3Jfd2V0LCBSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl9kcnkpCmNjMSRjb3IKCmxpYnJhcnkoR0dhbGx5KQpsaWJyYXJ5KENDUCkKZ2dwYWlycyhSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3RvcikKCiNjb21wdXRlIGNhbm9uaWNhbCBsb2FkaW5ncwoKY2MyIDwtIGNvbXB1dChSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl93ZXQsIFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yX2RyeSwgY2MxKQpjYzJbMzo2XQoKIyB0ZXN0cyBvZiBjYW5vbmljYWwgZGltZW5zaW9ucwpyaG8gPC0gY2MxJGNvcgojIyBEZWZpbmUgbnVtYmVyIG9mIG9ic2VydmF0aW9ucywgbnVtYmVyIG9mIHZhcmlhYmxlcyBpbiBmaXJzdCBzZXQsIGFuZCBudW1iZXIgb2YgdmFyaWFibGVzIGluIHRoZSBzZWNvbmQgc2V0LgpuIDwtIGRpbShSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl93ZXQpWzFdCnAgPC0gbGVuZ3RoKFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yX3dldCkKcSA8LSBsZW5ndGgoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3JfZHJ5KQoKIyMgQ2FsY3VsYXRlIHAtdmFsdWVzIHVzaW5nIHRoZSBGLWFwcHJveGltYXRpb25zIG9mIGRpZmZlcmVudCB0ZXN0IHN0YXRpc3RpY3M6CnAuYXN5bShyaG8sIG4sIHAsIHEsIHRzdGF0ID0gIldpbGtzIikKcC5hc3ltKHJobywgbiwgcCwgcSwgdHN0YXQgPSAiSG90ZWxsaW5nIikKCnMxIDwtIGRpYWcoc3FydChkaWFnKGNvdihSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl93ZXQpKSkpCnMxICUqJSBjYzEkeGNvZWYKCnMxIDwtIGRpYWcoc3FydChkaWFnKGNvdihSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl9kcnkpKSkpCnMxICUqJSBjYzEkeWNvZWYKCnBsdC5jYyhjYzEsIHZhci5sYWJlbCA9IFRSVUUsIGluZC5uYW1lcyA9IHJvd25hbWVzKFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yKSkKCmxpYnJhcnkodmVnYW4pCnZlZ2FuX2NjMSA8LSBjY2EoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3Jfd2V0LCBSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl9kcnkpCnBsb3QodmVnYW5fY2MxLCBzY2FsaW5nID0gMSkKIy0tLS0tLS0tLQoKIy0tQ0NBLWJ5LXllYXIKCgpSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl93ZXQyIDwtIGNiaW5kKFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c195ZWFyWzI6M10sIFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c195ZWFyWzhdLCBSTUFfZGFtYWdlX1BOV19leG9nZW5vdXNfeWVhclsxMjoxNF0sIFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c195ZWFyWzE2XSkKClJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yX2RyeTIgPC0gY2JpbmQoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3llYXJbNl0sIFJNQV9kYW1hZ2VfUE5XX2V4b2dlbm91c195ZWFyWzE3XSkKClJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yX3llYXIgPC0gY2JpbmQoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3Jfd2V0MiwgUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3JfZHJ5MikKCgpjYzEgPC0gY2MoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3Jfd2V0MiwgUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3JfZHJ5MikKY2MxJGNvcgoKbGlicmFyeShHR2FsbHkpCmxpYnJhcnkoQ0NQKQpnZ3BhaXJzKFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yX3llYXIpCgojY29tcHV0ZSBjYW5vbmljYWwgbG9hZGluZ3MKCmNjMiA8LSBjb21wdXQoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3Jfd2V0MiwgUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3JfZHJ5MiwgY2MxKQpjYzJbMzo2XQoKIyB0ZXN0cyBvZiBjYW5vbmljYWwgZGltZW5zaW9ucwpyaG8gPC0gY2MxJGNvcgojIyBEZWZpbmUgbnVtYmVyIG9mIG9ic2VydmF0aW9ucywgbnVtYmVyIG9mIHZhcmlhYmxlcyBpbiBmaXJzdCBzZXQsIGFuZCBudW1iZXIgb2YgdmFyaWFibGVzIGluIHRoZSBzZWNvbmQgc2V0LgpuIDwtIGRpbShSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl93ZXQyKVsxXQpwIDwtIGxlbmd0aChSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl93ZXQyKQpxIDwtIGxlbmd0aChSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl9kcnkyKQoKIyMgQ2FsY3VsYXRlIHAtdmFsdWVzIHVzaW5nIHRoZSBGLWFwcHJveGltYXRpb25zIG9mIGRpZmZlcmVudCB0ZXN0IHN0YXRpc3RpY3M6CnAuYXN5bShyaG8sIG4sIHAsIHEsIHRzdGF0ID0gIldpbGtzIikKcC5hc3ltKHJobywgbiwgcCwgcSwgdHN0YXQgPSAiSG90ZWxsaW5nIikKCnMxIDwtIGRpYWcoc3FydChkaWFnKGNvdihSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl93ZXQyKSkpKQpzMSAlKiUgY2MxJHhjb2VmCgpzMSA8LSBkaWFnKHNxcnQoZGlhZyhjb3YoUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3JfZHJ5MikpKSkKczEgJSolIGNjMSR5Y29lZgoKcGx0LmNjKGNjMSwgdmFyLmxhYmVsID0gVFJVRSwgaW5kLm5hbWVzID0gcm93bmFtZXMoUk1BX2RhbWFnZV9QTldfZXhvZ2Vub3VzX3llYXIpKQoKbGlicmFyeSh2ZWdhbikKdmVnYW5fY2MyIDwtIGNjYShSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl9kcnkyLCBSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3Rvcl93ZXQyKQpwbG90KHZlZ2FuX2NjMiwgc2NhbGluZyA9IDIpCgojLS0tLS0tLS0tCgoKCgojc2NyZWUgcGxvdHMKCnN0ZF9kZXYgPC0gcGNhX1JNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yJHNkZXYKCnByX3ZhciA8LSBzdGRfZGV2XjIKCnByX3ZhclsxOjEwXQoKcHJvcF92YXJleCA8LSBwcl92YXIvc3VtKHByX3ZhcikKCnBsb3QocHJvcF92YXJleCwgeGxhYiA9ICJQcmluY2lwYWwgQ29tcG9uZW50IiwKICAgICAgICAgICAgIHlsYWIgPSAiUHJvcG9ydGlvbiBvZiBWYXJpYW5jZSBFeHBsYWluZWQiLAogICAgICAgICAgICAgdHlwZSA9ICJiIikKCnBsb3QoY3Vtc3VtKHByb3BfdmFyZXgpLCB4bGFiID0gIlByaW5jaXBhbCBDb21wb25lbnQiLAogICAgICAgICAgICAgIHlsYWIgPSAiQ3VtdWxhdGl2ZSBQcm9wb3J0aW9uIG9mIFZhcmlhbmNlIEV4cGxhaW5lZCIsCiAgICAgICAgICAgICAgdHlwZSA9ICJiIikKCnRvcE4gPC0gMTUKbG9hZC5yb3QgPC0gcGNhX1JNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yJHJvdGF0aW9uCm5hbWVzKGxvYWQucm90WywxXVtvcmRlcihhYnMobG9hZC5yb3RbLDFdKSxkZWNyZWFzaW5nPVRSVUUpXVsxOnRvcE5dKQoKCgoKCgoKCgoKCgoKbGlicmFyeShuRmFjdG9ycykKZXYgPC0gZWlnZW4oY29yKFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yKSkgIyBnZXQgZWlnZW52YWx1ZXMKYXAgPC0gcGFyYWxsZWwoc3ViamVjdD1ucm93KFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yKSx2YXI9bmNvbChSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3RvciksCiAgcmVwPTEwMCxjZW50PS4wNSkKblMgPC0gblNjcmVlKHg9ZXYkdmFsdWVzLCBhcGFyYWxsZWw9YXAkZWlnZW4kcWV2cGVhKQpwbG90blNjcmVlKG5TKQoKI2ZhY3RhbmFsCmZpdCA8LSBmYWN0YW5hbCh4ID0gUk1BX2RhbWFnZV9JUE5XX2V4b2dlbm91c19mYWN0b3IsIGZhY3RvcnMgPSAzLCByb3RhdGlvbiA9ICJ2YXJpbWF4IikKbG9hZCA8LSBmaXQkbG9hZGluZ3NbLDE6Ml0gCnBsb3QobG9hZCx0eXBlPSJuIikgIyBzZXQgdXAgcGxvdCAKdGV4dChsb2FkLGxhYmVscz1uYW1lcyhSTUFfZGFtYWdlX0lQTldfZXhvZ2Vub3VzX2ZhY3RvciksY2V4PS43KSAjIGFkZCB2YXJpYWJsZSBuYW1lcwoKbGlicmFyeShGYWN0b01pbmVSKQpyZXN1bHQgPC0gUENBKFJNQV9kYW1hZ2VfSVBOV19leG9nZW5vdXNfZmFjdG9yKSAjIGdyYXBocyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseQoKCmBgYAoKCjxicj48L2JyPgoKIVtdKGh0dHBzOi8vZG1pbmUuaW8vd2FmL2ltZy9TdGVwMS5wbmcpCgo8YnI+PC9icj4KPGRpdiBhbGlnbj0ibGVmdCI+CgojI1N0ZXAgNjogSVBOVyBpbnN1cmFuY2UgY2xhaW0gbG9zcyBzdW1tYXJ5Cgo8ZGl2IGFsaWduPSJjZW50ZXIiPgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPVRSVUUsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gOX0KCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQpsaWJyYXJ5KGh0bWxUYWJsZSkKbGlicmFyeShzdHJpbmdpKQoKI3BpZSBjaGFydCBmb3IgMjAwNy0yMDE1CgpvcHRpb25zKHNjaXBlbj05OTkpCgphZGROb0Fuc3dlciA8LSBmdW5jdGlvbih4KXsKICBpZihpcy5mYWN0b3IoeCkpIHJldHVybihmYWN0b3IoeCwgbGV2ZWxzPWMobGV2ZWxzKHgpLCAiTm8gQW5zd2VyIikpKQogIHJldHVybih4KQp9CgoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMgPC0gYWdncmVnYXRlKHBhbG91c2VfbG9zc3BlcmFjcmVzJGxvc3NwZXJhY3JlcywgbGlzdCggcGFsb3VzZV9sb3NzcGVyYWNyZXMkeWVhciwgcGFsb3VzZV9sb3NzcGVyYWNyZXMkc3RhdGUsIHBhbG91c2VfbG9zc3BlcmFjcmVzJGNvbW1vZGl0eSksIEZVTiA9ICJtZWFuIikKCgoKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMpIDwtIGMoInllYXIiLCAic3RhdGUiLCAiY29tbW9kaXR5IiwgICJsb3NzcGVyYWNyZXMiKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMyIDwtIGFnZ3JlZ2F0ZShwYWxvdXNlX2xvc3NwZXJhY3JlcyRsb3NzcGVyYWNyZXMsIGxpc3QoIHBhbG91c2VfbG9zc3BlcmFjcmVzJHllYXIsIHBhbG91c2VfbG9zc3BlcmFjcmVzJGRhbWFnZWNhdXNlKSwgRlVOID0gIm1lYW4iKQoKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMyKSA8LSBjKCJ5ZWFyIiwgImRhbWFnZWNhdXNlIiwgImxvc3NwZXJhY3JlcyIpCgojcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzLCBsb3NzcGVyYWNyZXMgPiAyMDApCiNwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlczIgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiwgbG9zc3BlcmFjcmVzID4gMjAwKQoKI3BhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcywgY29tbW9kaXR5ICE9ICJBREpVU1RFRCBHUk9TUyBSRVZFTlVFIikKI3BhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcywgY29tbW9kaXR5ICE9ICJPdGhlciAoU25vdy9MaWdodG5pbmctRXRjLikiKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMyJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlczIkZGFtYWdlY2F1c2UpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHkgPC0gZmFjdG9yKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzJGNvbW1vZGl0eSkKCgpsZXZlbHMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkY29tbW9kaXR5KVsxM10gPC0gIkFQUklDT1RTIgpsZXZlbHMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkY29tbW9kaXR5KVsxNF0gPC0gIkZSRUVTVE9ORSBQRUFDSEVTIgpsZXZlbHMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkY29tbW9kaXR5KVsxNV0gPC0gIk5FQ1RBUklORVMiCmxldmVscyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHkpWzIyXSA8LSAiUEFTVFVSRSwgUkFOR0VMQU5EIgoKbGV2ZWxzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRkYW1hZ2VjYXVzZSlbOF0gPC0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIKbGV2ZWxzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRkYW1hZ2VjYXVzZSlbMjNdIDwtICJTbm93L0xpZ2h0bmluZyIKbGV2ZWxzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRkYW1hZ2VjYXVzZSlbMjFdIDwtICJMYWNrIElycmlnIFByZXAiCgoKCgoKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyA8LSBhZ2dyZWdhdGUoc3VtbG9zc19wYWxvdXNlX3N1bSRsb3NzLCBieSA9IGxpc3QoIHN1bWxvc3NfcGFsb3VzZV9zdW0keWVhciwgc3VtbG9zc19wYWxvdXNlX3N1bSRjb21tb2RpdHkpLCBGVU4gPSAic3VtIikKCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcykgPC0gYygieWVhciIsICJjb21tb2RpdHkiLCAgImxvc3MiKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzMiA8LSBhZ2dyZWdhdGUoc3VtbG9zc19wYWxvdXNlX3N1bSRsb3NzLCBsaXN0KCBzdW1sb3NzX3BhbG91c2Vfc3VtJHllYXIsIHN1bWxvc3NfcGFsb3VzZV9zdW0kZGFtYWdlY2F1c2UpLCBGVU4gPSAic3VtIikKCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIpIDwtIGMoInllYXIiLCAiZGFtYWdlY2F1c2UiLCAibG9zcyIpCgpwc2xvc3MgPC0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcywgbG9zcyA+IDEwMDAwMDAwKQpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyLCBsb3NzID4gMTAwMDAwMDApCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcywgY29tbW9kaXR5ICE9ICJBREpVU1RFRCBHUk9TUyBSRVZFTlVFIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkZGFtYWdlY2F1c2UgPC0gZmFjdG9yKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkZGFtYWdlY2F1c2UpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MkY29tbW9kaXR5IDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MkY29tbW9kaXR5KQoKCmxldmVscyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyJGRhbWFnZWNhdXNlKVs0XSA8LSAiRXhjZXNzaXZlIE1vaXN0dXJlIgoKCgoKCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50IDwtIGFnZ3JlZ2F0ZShjb3VudF9wYWxvdXNlX2NvdW50JGNvdW50LCBsaXN0KCBjb3VudF9wYWxvdXNlX2NvdW50JHllYXIsIGNvdW50X3BhbG91c2VfY291bnQkc3RhdGUsIGNvdW50X3BhbG91c2VfY291bnQkY29tbW9kaXR5KSwgRlVOID0gInN1bSIpCgpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50KSA8LSBjKCJ5ZWFyIiwgInN0YXRlIiwgImNvbW1vZGl0eSIsICAibG9zcyIpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiA8LSBhZ2dyZWdhdGUoY291bnRfcGFsb3VzZV9jb3VudCRjb3VudCwgbGlzdCggY291bnRfcGFsb3VzZV9jb3VudCR5ZWFyLCBjb3VudF9wYWxvdXNlX2NvdW50JGRhbWFnZWNhdXNlKSwgRlVOID0gInN1bSIpCgpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MikgPC0gYygieWVhciIsICJkYW1hZ2VjYXVzZSIsICJsb3NzIikKCiMtYm94cGxvdHMgb2YgY291bnQgZGF0YSBmb3IgYWxsIGNvbW1vZGl0aWVzIGFuZCBhbGwgZGFtYWdlIGNhdXNlcy0gMTk4OS0yMDE1CgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50IDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50LCBsb3NzID4gNTApCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQyIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiwgbG9zcyA+IDUwKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCwgY29tbW9kaXR5ICE9ICJBREpVU1RFRCBHUk9TUyBSRVZFTlVFIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQyJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiRkYW1hZ2VjYXVzZSkKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkY29tbW9kaXR5IDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGNvbW1vZGl0eSkKCgpsZXZlbHMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudDIkZGFtYWdlY2F1c2UpWzVdIDwtICJFeGNlc3NpdmUgTW9pc3R1cmUiCiNsZXZlbHMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudDIkZGFtYWdlY2F1c2UpWzExXSA8LSAiT3RoZXIiCgoKI3Byb3Blcj1mdW5jdGlvbih4KSBwYXN0ZTAodG91cHBlcihzdWJzdHIoeCwgMSwgMSkpLCB0b2xvd2VyKHN1YnN0cmluZyh4LCAyKSkpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGNvbW1vZGl0eSA8LSB0b2xvd2VyKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkY29tbW9kaXR5KQpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGNvbW1vZGl0eSA8LSBzdHJpX3RyYW5zX2dlbmVyYWwocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRjb21tb2RpdHksIGlkID0gIlRpdGxlIikKCnBhcihtYXI9Yyg5LjUsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQoKYm94cGxvdChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGxvc3MgfiBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGNvbW1vZGl0eSwgY29sID0gJ2xpZ2h0Ymx1ZScsIHlsYWIgPSAiSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSIsIHlheHQgPSAnbicsIHhsYWIgPSAiIiwgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRjb21tb2RpdHksIGxhcyA9IDMsIGNleC5heGlzID0gMS40LCBjZXgubWFpbiA9IDEuNCwgY2V4LmxhYiA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEpCmF4aXMoMiwgbGFzID0gMSwgY2V4LmF4aXMgPSAxLjQsIGF0ID0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkbG9zcyksIGxhYmVscyA9IHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGxvc3MpKQoKI3N0cmlwY2hhcnQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRjb21tb2RpdHksIHZlcnRpY2FsID0gVFJVRSwgIAojICAgIG1ldGhvZCA9ICJqaXR0ZXIiLCBhZGQgPSBUUlVFLCBwY2ggPSAyMCwgY29sPXVuaXF1ZShhcy5udW1lcmljKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkc3RhdGUpKSApCgp0aXRsZSh4bGFiPSJDb21tb2RpdHkiLCBsaW5lPTcuNSwgY2V4LmxhYiA9IDEuNCkKdGl0bGUobWFpbj0iSVBOVyBpbnN1cmFuY2UgY2xhaW1zIGJ5IGNvbW1vZGl0eTogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGFkaiA9IDAsIGNleC5tYWluID0gMS45KQoKCgpwYXIobWFyPWMoMTIuNywgNi4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCgpib3hwbG90KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQyJGxvc3MgfiBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50MiRkYW1hZ2VjYXVzZSwgY29sID0gJ2xpZ2h0Ymx1ZScsIHlsYWIgPSAiSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSIsICB5YXh0ID0gJ24nLCB4bGFiID0gIiIsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQyJGRhbWFnZWNhdXNlLCBsYXMgPSAzLCBjZXgubWFpbiA9IDEuOSwgY2V4LmxhYiA9IDEuNCwgY2V4LmF4aXMgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxLCBvdXRsaW5lID0gRkFMU0UpCmF4aXMoMiwgbGFzID0gMSwgY2V4LmF4aXMgPSAxLjIsIGF0ID0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQyJGxvc3MpLCBsYWJlbHMgPSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudDIkbG9zcykpCgp0aXRsZSh4bGFiPSJEYW1hZ2UgQ2F1c2UiLCBsaW5lPTExLjUsIGNleC5sYWIgPSAxLjQpCnRpdGxlKG1haW49IklQTlcgaW5zdXJhbmNlIGNsYWltcyBieSBkYW1hZ2UgY2F1c2U6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBhZGogPSAwLCBjZXgubWFpbiA9IDEuOSkKCgoKcGFyKG1hcj1jKDgsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQoKbWVhbnMgPC0gYWdncmVnYXRlKGxvc3MgfiAgY29tbW9kaXR5LCBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MsIG1lYW4pCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MkY29tbW9kaXR5IDwtIHRvbG93ZXIocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSkKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSA8LSBzdHJpX3RyYW5zX2dlbmVyYWwocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSwgaWQgPSAiVGl0bGUiKQoKYm94cGxvdChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MkbG9zcyB+IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyRjb21tb2RpdHksIGNvbCA9ICdsaWdodGJsdWUnLCB5bGFiID0gIkluc3VyYW5jZSBDbGFpbSBMb3NzICgkKSIsIHlheHQgPSAnbicsIHhsYWIgPSAiIiwgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSwgbGFzID0gMywgY2V4LmF4aXMgPSAxLjQsIGNleC5tYWluID0gMS40LCBjZXgubGFiID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSwgb3V0bGluZSA9IEZBTFNFKQojYXhpcygyLCBsYXMgPSAxLCBjZXguYXhpcyA9IDEuMiwgYXQgPSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGxvc3MpLCBsYWJlbHMgPSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGxvc3MpKQoKcHRzIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGNleC5heGlzID0gMS40LCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCiNhYmxpbmUodiA9IDE0LjUsIGx0eSA9IDIsIGNvbG9yID0gInJlZCIpCiNzdHJpcGNoYXJ0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcyRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJGNvbW1vZGl0eSwgdmVydGljYWwgPSBUUlVFLCAgCiMgICAgbWV0aG9kID0gImppdHRlciIsIGFkZCA9IFRSVUUsIHBjaCA9IDIwLCBjb2w9dW5pcXVlKGFzLm51bWVyaWMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzJHN0YXRlKSkgKQoKdGl0bGUoeGxhYj0iQ29tbW9kaXR5IiwgbGluZT02LCBjZXgubGFiID0gMS40KQp0aXRsZShtYWluPSJJUE5XIGluc3VyYW5jZSBsb3NzIGJ5IGNvbW1vZGl0eTogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGFkaiA9IDAsIGNleC5tYWluID0gMS45KQoKI3BvaW50cygxOm5yb3cobWVhbnMpLCBtZWFucyRsb3NzLCBjb2wgPSAicmVkIikKI3RleHQoMTpucm93KG1lYW5zKSwgbWVhbnMkbG9zcyArIDAuMDgsIGxhYmVscyA9IG1lYW5zJGxvc3MpCgoKcGFyKG1hcj1jKDEyLjIsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQoKYm94cGxvdChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyJGxvc3MgfiBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyJGRhbWFnZWNhdXNlLCBjb2wgPSAnbGlnaHRibHVlJywgeWxhYiA9ICJJbnN1cmFuY2UgQ2xhaW0gTG9zcyAoJCkiLCAgeWF4dCA9ICduJywgeGxhYiA9ICIiLCBuYW1lcy5hcmcgPSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyJGRhbWFnZWNhdXNlLCBsYXMgPSAzLCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKI2F4aXMoMiwgbGFzID0gMSwgY2V4LmF4aXMgPSAxLjIsIGF0ID0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkbG9zcyksIGxhYmVscyA9IHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyJGxvc3MpKQpwdHMgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zczIkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBjZXguYXhpcyA9IDEuMiwgYXQgPSBwdHMyLCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQojc3RyaXBjaGFydChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyJGxvc3MgfiBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyJGRhbWFnZWNhdXNlLCB2ZXJ0aWNhbCA9IFRSVUUsICAKICMgICBtZXRob2QgPSAiaml0dGVyIiwgYWRkID0gVFJVRSwgcGNoID0gMjAsIGNvbD11bmlxdWUoYXMubnVtZXJpYyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MyJHN0YXRlKSkgKQoKdGl0bGUoeGxhYj0iRGFtYWdlIENhdXNlIiwgbGluZT0xMSwgY2V4LmxhYiA9IDEuNCkKdGl0bGUobWFpbj0iSVBOVyBpbnN1cmFuY2UgbG9zcyBieSBkYW1hZ2UgY2F1c2U6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBhZGogPSAwLCBjZXgubWFpbiA9IDEuOSkKCgoKcGFyKG1hcj1jKDExLjUsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkY29tbW9kaXR5IDwtIHRvbG93ZXIocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkY29tbW9kaXR5KQpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRjb21tb2RpdHkgPC0gc3RyaV90cmFuc19nZW5lcmFsKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzJGNvbW1vZGl0eSwgaWQgPSAiVGl0bGUiKQoKYm94cGxvdChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMkY29tbW9kaXR5LCBjb2wgPSAnbGlnaHRibHVlJywgeWxhYiA9ICJJbnN1cmFuY2UgQ2xhaW0gTG9zcyBwZXIgQWNyZSAoJCkiLCB5YXh0ID0gJ24nLCB4bGFiID0gIiIsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzJGNvbW1vZGl0eSwgbGFzID0gMywgY2V4LmF4aXMgPSAxLjQsIGNleC5tYWluID0gMS40LCBjZXgubGFiID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSwgb3V0bGluZSA9IEZBTFNFKQpheGlzKDIsIGxhcyA9IDEsIGNleC5heGlzID0gMS40LCBhdCA9IHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlcyRsb3NzKSwgbGFiZWxzID0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzJGxvc3MpKQoKI3N0cmlwY2hhcnQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRjb21tb2RpdHksIHZlcnRpY2FsID0gVFJVRSwgIAojICAgIG1ldGhvZCA9ICJqaXR0ZXIiLCBhZGQgPSBUUlVFLCBwY2ggPSAyMCwgY29sPXVuaXF1ZShhcy5udW1lcmljKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkc3RhdGUpKSApCgp0aXRsZSh4bGFiPSJDb21tb2RpdHkiLCBsaW5lPTEwLjUsIGNleC5sYWIgPSAxLjQpCnRpdGxlKG1haW49IklQTlcgaW5zdXJhbmNlIGxvc3MgcGVyIGFjcmUgYnkgY29tbW9kaXR5OiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCgpwYXIobWFyPWMoMTEuOCwgNi4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCgpib3hwbG90KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzcGVyYWNyZXMyJGRhbWFnZWNhdXNlLCBjb2wgPSAnbGlnaHRibHVlJywgeWxhYiA9ICJJbnN1cmFuY2UgQ2FpbSBMb3NzIHBlciBBY3JlICgkKSIsICB5YXh0ID0gJ24nLCB4bGFiID0gIiIsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc3BlcmFjcmVzMiRkYW1hZ2VjYXVzZSwgbGFzID0gMywgY2V4Lm1haW4gPSAxLjUsIGNleC5sYWIgPSAxLjQsIGNleC5heGlzID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSwgb3V0bGluZSA9IEZBTFNFKQpheGlzKDIsIGxhcyA9IDEsIGNleC5heGlzID0gMS40LCBhdCA9IHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlczIkbG9zcyksIGxhYmVscyA9IHByZXR0eShwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NwZXJhY3JlczIkbG9zcykpCgp0aXRsZSh4bGFiPSJEYW1hZ2UgQ2F1c2UiLCBsaW5lPTEwLjUsIGNleC5sYWIgPSAxLjQpCnRpdGxlKG1haW49IklQTlcgaW5zdXJhbmNlIGxvc3MgcGVyIGFjcmUgYnkgZGFtYWdlIGNhdXNlOiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCgoKYGBgCgo8YnI+PC9icj4KCiFbXShodHRwczovL2RtaW5lLmlvL3dhZi9pbWcvU3RlcDEucG5nKQoKPGJyPjwvYnI+CjxkaXYgYWxpZ249ImxlZnQiPgoKIyNTdGVwIDc6IElQTlcgaW5zdXJhbmNlIGNsYWltIGxvc3Mgc3VtbWFyeQoKPGRpdiBhbGlnbj0iY2VudGVyIj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPVRSVUUsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gN30KcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSwgeWVhciA+PSAyMDAxICYgeWVhciA8PSAyMDE1KSAKCiNwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1IDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlLCBjb21tb2RpdHkgPT0gIldIRUFUIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUkbG9zcywgbGlzdChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJHllYXIpLCBGVU4gPSAic3VtIikKCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUpIDwtIGMoInllYXIiLCAibG9zcyIpCgojcGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGUgPC0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNVtvcmRlcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1JGxvc3MpLF0gCgpYIDwtIHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUKCiNYIDwtIHBhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlW29yZGVyKHBhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlJGxvc3MpLF0gCiNjb2xuYW1lcyhYKSA8LSBjKCJkYW1hZ2VjYXVzZSIsICJsb3NzIikKClhYIDwtIFgKI1hYIDwtIHN1YnNldChYLCBsb3NzID4gMTAwMDAwMCkKWVlZMSA8LSBYWAoKdHQzIDwtIHR0aGVtZV9kZWZhdWx0KGNvcmU9bGlzdChmZ19wYXJhbXM9bGlzdChoanVzdD0wLCB4PTAuMSkpLAogICAgICAgICAgICAgICAgICAgICAgcm93aGVhZD1saXN0KGZnX3BhcmFtcz1saXN0KGhqdXN0PTAsIHg9MCkpKQoKI1lZWTE8LSBZWVkxW3NlcShkaW0oWVlZMSlbMV0sMSksXQpZWVkxJGxvc3MgPC0gcm91bmQoWVlZMSRsb3NzLCAwKQojZ3JpZC50YWJsZShZWVkxLCB0aGVtZSA9IHR0Mywgcm93cyA9IE5VTEwpCgpZWVkyIDwtIFlZWTEKWVlZMiRsb3NzIDwtIGZvcm1hdChZWVkyJGxvc3MsYmlnLm1hcms9IiwiLHNjaWVudGlmaWM9RkFMU0UpCllZWTIkbG9zcyA8LSBwYXN0ZSgiJCIsIFlZWTIkbG9zcywgc2VwPSIiKQpZWVkyJGxvc3MgPC0gZ3N1YigiICIsICIiLCBZWVkyJGxvc3MsIGZpeGVkID0gVFJVRSkKCmRkMiA8LSBjYmluZChZWVkyWzE6MTUsIF0pCmNvbG5hbWVzKGRkMikgPC0gYygieWVhciIsICJsb3NzIikKZGQyW2lzLm5hKGRkMildIDwtICIiCgoKcGFyKG1hcj1jKDUuOCwgNy4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg2LCAxLCAwKSwgbGFzPTApCiNsZXZlbHMoWVlZMSRjb21tb2RpdHkpWzFdIDwtICJBREogR1JPU1MgUkVWRU5VRSIKYmFycGxvdChZWVkxJGxvc3MsIG5hbWVzLmFyZyA9IFlZWTEkeWVhciwgbGFzID0gMywgY2V4Lm5hbWVzID0gMS40LCB5YXh0PSJuIiwgY29sID0gImxpZ2h0Ymx1ZSIpIApwdHMgPC0gcHJldHR5KFlZWTEkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KFlZWTEkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIiksIGNleC5heGlzID0gMS40KQp0aXRsZShtYWluPSJJUE5XIHRvdGFsIGluc3VyYW5jZSBsb3NzOiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IlllYXJzIiwgbGluZT00LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJJbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQuNSwgY2V4LmxhYiA9IDEuNCkKCiNhYmxpbmUodiA9IDE0LjUsIGx0eSA9IDIsIGNvbG9yID0gInJlZCIpCgpodG1sVGFibGUoZGQyLAogICAgICAgICAgY2dyb3VwID0gYygiMjAwMS0yMDE1IiksCiAgICAgICAgICBuLmNncm91cCA9IGMoMiksCiAgICAgICAgICBjYXB0aW9uID0gIklQTlcgcmVnaW9uIHRvdGFsIGluc3VyYW5jZSBsb3NzIGJ5IHllYXIsIDIwMDEtMjAxNSIsCiAgICAgICAgICBhbGlnbiA9ICJjIiwKICAgICAgICAgIHJuYW1lcyA9IEZBTFNFLAogICAgICAgICAgY3NzLmNlbGwgPSAicGFkZGluZy1sZWZ0OiAuNWVtOyBwYWRkaW5nLXJpZ2h0OiAuNWVtOyIpCgoKCgoKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ3JpZEV4dHJhKQpsaWJyYXJ5KHN0cmluZ2kpCgojcGllIGNoYXJ0IGZvciAyMDA3LTIwMTUKCm9wdGlvbnMoc2NpcGVuPTk5OSkKCmFkZE5vQW5zd2VyIDwtIGZ1bmN0aW9uKHgpewogIGlmKGlzLmZhY3Rvcih4KSkgcmV0dXJuKGZhY3Rvcih4LCBsZXZlbHM9YyhsZXZlbHMoeCksICJObyBBbnN3ZXIiKSkpCiAgcmV0dXJuKHgpCn0KCgojcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSwgeWVhciA+PSAxOTg5ICYgeWVhciA8PSAyMDEpCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUkbG9zcywgbGlzdChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJGNvbW1vZGl0eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1KSA8LSBjKCJjb21tb2RpdHkiLCAibG9zcyIpCgpwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZSA8LSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1W29yZGVyKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUkbG9zcyksXSAKWCA8LSBwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZVtvcmRlcihwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZSRsb3NzKSxdIAojY29sbmFtZXMoWCkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpClhYIDwtIHN1YnNldChYLCBsb3NzID4gNzAwMDAwMCkKWVlZMSA8LSBYWAoKdHQzIDwtIHR0aGVtZV9kZWZhdWx0KGNvcmU9bGlzdChmZ19wYXJhbXM9bGlzdChoanVzdD0wLCB4PTAuMSkpLAogICAgICAgICAgICAgICAgICAgICAgcm93aGVhZD1saXN0KGZnX3BhcmFtcz1saXN0KGhqdXN0PTAsIHg9MCkpKQoKWVlZMTwtIFlZWTFbc2VxKGRpbShZWVkxKVsxXSwxKSxdCiNncmlkLnRhYmxlKFlZWTEsIHRoZW1lID0gdHQzKQoKCllZWTIgPC0gWVlZMQpZWVkyJGxvc3MgPC0gZm9ybWF0KFlZWTIkbG9zcyxiaWcubWFyaz0iLCIsc2NpZW50aWZpYz1GQUxTRSkKWVlZMiRsb3NzIDwtIHBhc3RlKCIkIiwgWVlZMiRsb3NzLCBzZXA9IiIpCllZWTIkbG9zcyA8LSBnc3ViKCIgIiwgIiIsIFlZWTIkbG9zcywgZml4ZWQgPSBUUlVFKQoKWVlZMiA8LSBzdWJzZXQoWVlZMiwgY29tbW9kaXR5ICE9ICJBREpVU1RFRCBHUk9TUyBSRVZFTlVFIikKCgoja2FibGUoWVlZMSwgZm9ybWF0ID0gImh0bWwiLCByb3cubmFtZXMgPSBGQUxTRSkgJT4lIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImJvcmRlcmVkIiksIGZ1bGxfd2lkdGggPSBGQUxTRSkKCgpZWVkxIDwtIHN1YnNldChZWVkxLCBjb21tb2RpdHkgIT0gIkFESlVTVEVEIEdST1NTIFJFVkVOVUUiKQpZWVkxIDwtIHN1YnNldChZWVkxLCBjb21tb2RpdHkgIT0gIkFESlVTVEVEIEdST1NTIFJFVkVOVUUtTElURSIpCgpwYXIobWFyPWMoOC41LCA4LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDYsIDEsIDApLCBsYXM9MCkKCllZWTEkY29tbW9kaXR5PC0gdG9sb3dlcihZWVkxJGNvbW1vZGl0eSkKWVlZMSRjb21tb2RpdHkgPC0gc3RyaV90cmFuc19nZW5lcmFsKFlZWTEkY29tbW9kaXR5LCBpZCA9ICJUaXRsZSIpCgoKI2xldmVscyhZWVkxJGNvbW1vZGl0eSlbMV0gPC0gIkFESiBHUk9TUyBSRVZFTlVFIgpiYXJwbG90KFlZWTEkbG9zcywgbmFtZXMuYXJnID0gWVlZMSRjb21tb2RpdHksIGNleC5uYW1lcyA9IDEuNCwgbGFzID0gMywgeWF4dD0ibiIsIGNleC5sYWIgPSAxLjQsIGNvbCA9ICJsaWdodGJsdWUiKSAKcHRzIDwtIHByZXR0eShZWVkxJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShZWVkxJGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCnRpdGxlKG1haW49IklQTlcgdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgY29tbW9kaXR5OiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvbW1vZGl0eSIsIGxpbmU9Ni41LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJJbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQuNSwgY2V4LmxhYiA9IDEuNCkKCgpodG1sVGFibGUoWVlZMiwKICAgICAgICAgIGNncm91cCA9IGMoIjIwMDEtMjAxNSIpLAogICAgICAgICAgY2FwdGlvbiA9ICJJUE5XIHJlZ2lvbiB0b3RhbCBpbnN1cmFuY2UgbG9zcyBieSBjb21tb2RpdHksIDIwMDEtMjAxNSIsCiAgICAgICAgICBhbGlnbiA9ICJjIiwKICAgICAgICAgIHJuYW1lcyA9IEZBTFNFLAogICAgICAgICAgY3NzLmNlbGwgPSAicGFkZGluZy1sZWZ0OiAuNWVtOyBwYWRkaW5nLXJpZ2h0OiAuNWVtOyIpCgoKCgoKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ3JpZEV4dHJhKQoKI3BpZSBjaGFydCBmb3IgMjAwNy0yMDE1CgpvcHRpb25zKHNjaXBlbj05OTkpCgphZGROb0Fuc3dlciA8LSBmdW5jdGlvbih4KXsKICBpZihpcy5mYWN0b3IoeCkpIHJldHVybihmYWN0b3IoeCwgbGV2ZWxzPWMobGV2ZWxzKHgpLCAiTm8gQW5zd2VyIikpKQogIHJldHVybih4KQp9CgojcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNSA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSwgY29tbW9kaXR5ID09ICJXSEVBVCIpCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUkbG9zcywgbGlzdChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlJGRhbWFnZWNhdXNlKSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUpIDwtIGMoImNvbW1vZGl0eSIsICJsb3NzIikKCnBhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlIDwtIHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVbb3JkZXIocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNSRsb3NzKSxdIApYIDwtIHBhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlW29yZGVyKHBhbG91c2Vfc3VtbG9zc18yMDA3XzIwMTVfYWdncmVnYXRlJGxvc3MpLF0gCiNjb2xuYW1lcyhYKSA8LSBjKCJkYW1hZ2VjYXVzZSIsICJsb3NzIikKWFggPC0gc3Vic2V0KFgsIGxvc3MgPiAxMDAwMDAwMCkKWVlZMSA8LSBYWAoKdHQzIDwtIHR0aGVtZV9kZWZhdWx0KGNvcmU9bGlzdChmZ19wYXJhbXM9bGlzdChoanVzdD0wLCB4PTAuMSkpLAogICAgICAgICAgICAgICAgICAgICAgcm93aGVhZD1saXN0KGZnX3BhcmFtcz1saXN0KGhqdXN0PTAsIHg9MCkpKQoKCllZWTE8LSBZWVkxW3NlcShkaW0oWVlZMSlbMV0sMSksXQoKWVlZMiA8LSBZWVkxCmxldmVscyhZWVkyJGNvbW1vZGl0eSlbOF0gPC0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIKWVlZMiRsb3NzIDwtIGZvcm1hdChZWVkyJGxvc3MsYmlnLm1hcms9IiwiLHNjaWVudGlmaWM9RkFMU0UpCllZWTIkbG9zcyA8LSBwYXN0ZSgiJCIsIFlZWTIkbG9zcywgc2VwPSIiKQpZWVkyJGxvc3MgPC0gZ3N1YigiICIsICIiLCBZWVkyJGxvc3MsIGZpeGVkID0gVFJVRSkKY29sbmFtZXMoWVlZMikgPC0gYygiZGFtYWdlIGNhdXNlIiwgImxvc3MiKQoKI1lZWTIgPC0gc3Vic2V0KFlZWTIsIGNvbW1vZGl0eSAhPSAiQURKVVNURUQgR1JPU1MgUkVWRU5VRSIpCgoKI2dyaWQudGFibGUoWVlZMSwgdGhlbWUgPSB0dDMpCiNrYWJsZShZWVkxLCBmb3JtYXQgPSAiaHRtbCIsIHJvdy5uYW1lcyA9IEZBTFNFKSAlPiUga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiYm9yZGVyZWQiKSwgZnVsbF93aWR0aCA9IEZBTFNFKQoKcGFyKG1hcj1jKDEyLCA2LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDQsIDEsIDApLCBsYXM9MCkKbGV2ZWxzKFlZWTEkY29tbW9kaXR5KVs4XSA8LSAiRXhjZXNzaXZlIE1vaXN0dXJlIgpiYXJwbG90KFlZWTEkbG9zcywgbmFtZXMuYXJnID0gWVlZMSRjb21tb2RpdHksIGNleC5uYW1lcyA9IDEuNCwgbGFzID0gMywgeWF4dD0ibiIsIGNvbCA9ICJsaWdodGJsdWUiKQpwdHMgPC0gcHJldHR5KFlZWTEkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KFlZWTEkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKI210ZXh0KHRleHQgPSAiRGFtYWdlIENhdXNlIiwKIyAgICAgIHNpZGUgPSAxLCNzaWRlIDEgPSBib3R0b20KIyAgICAgIGxpbmUgPSA3LjgpCgp0aXRsZShtYWluPSJJUE5XIHRvdGFsIGluc3VyYW5jZSBsb3NzIGJ5IGRhbWFnZSBjYXVzZTogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJEYW1hZ2UgQ2F1c2UiLCBsaW5lPTEwLjUsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9Ikluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NC41LCBjZXgubGFiID0gMS40KQoKaHRtbFRhYmxlKFlZWTIsCiAgICAgICAgICBjZ3JvdXAgPSBjKCIyMDAxLTIwMTUiKSwKICAgICAgICAgIGNhcHRpb24gPSAiSVBOVyByZWdpb24gdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgZGFtYWdlIGNhdXNlLCAyMDAxLTIwMTUiLAogICAgICAgICAgYWxpZ24gPSAiYyIsCiAgICAgICAgICBybmFtZXMgPSBGQUxTRSwKICAgICAgICAgIGNzcy5jZWxsID0gInBhZGRpbmctbGVmdDogLjVlbTsgcGFkZGluZy1yaWdodDogLjVlbTsiKQoKI3BpZSBjaGFydCBvZiAyMDAxIC0gMjAxNSBkYW1hZ2UgY2F1c2VzCgpwIDwtIHBsb3RfbHkoWVlZMSwgbGFiZWxzID0gfmNvbW1vZGl0eSwgdmFsdWVzID0gfmxvc3MsIHR5cGUgPSAncGllJywKICAgICAgICAgICAgIHRleHRwb3NpdGlvbiA9ICdpbnNpZGUnLAogICAgICAgICAgICAgdGV4dGluZm8gPSAnbGFiZWwrcGVyY2VudCcsCiAgICAgICAgICAgICBpbnNpZGV0ZXh0Zm9udCA9IGxpc3QoY29sb3IgPSAnI0ZGRkZGRicpLAogICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLAogICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnJCcsIGxvc3MsICcgYmlsbGlvbnMnKSwKICAgICAgICAgICAgIG1hcmtlciA9IGxpc3QoY29sb3JzID0gY29sb3JzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGlzdChjb2xvciA9ICcjRkZGRkZGJywgd2lkdGggPSAxKSksCiAgICAgICAgICAgICAjVGhlICdwdWxsJyBhdHRyaWJ1dGUgY2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUgc3BhY2UgYmV0d2VlbiB0aGUgc2VjdG9ycwogICAgICAgICAgICAgc2hvd2xlZ2VuZCA9IFRSVUUpICU+JQogIGxheW91dCh0aXRsZSA9ICdpUE5XIGluc3VyYW5jZSBsb3NzIGJ5IGRhbWFnZSBjYXVzZSwgYWxsIGNvbW1vZGl0aWVzJywgc2hvd2xlZ2VuZCA9IFQsCiAgICAgICAgIHhheGlzID0gbGlzdChzaG93Z3JpZCA9IEZBTFNFLCB6ZXJvbGluZSA9IEZBTFNFLCBzaG93dGlja2xhYmVscyA9IEZBTFNFKSwKICAgICAgICAgeWF4aXMgPSBsaXN0KHNob3dncmlkID0gRkFMU0UsIHplcm9saW5lID0gRkFMU0UsIHNob3d0aWNrbGFiZWxzID0gRkFMU0UpKQoKCgoKCmBgYAoKPGJyPjwvYnI+CgohW10oaHR0cHM6Ly9kbWluZS5pby93YWYvaW1nL1N0ZXAxLnBuZykKCjxicj48L2JyPgo8ZGl2IGFsaWduPSJsZWZ0Ij4KCiMjIFNURVAgODogQVBQTEVTLCAyMDAxLTIwMTUgZm9yIHRoZSBJUE5XCgo8YnI+PC9icj4KCjxkaXYgYWxpZ249ImNlbnRlciI+CgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1UUlVFLCBlY2hvPUZBTFNFfQoKIy0tcmVkdWNlIHllYXJzIHRvIDIwMDEtMjAxNQp4eHllYXIgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUsIHllYXIgPj0gMjAwMSkKCiNtaXNzaW5nIGRhdGEgcmV2aWV3IG9mIGRhdGEgZnJvbSAyMDAxLTIwMTUgZm9yIGFsbCBjb21tb2RpdGllcyBhbmQgYWxsIGRhbWFnZSBjYXVzZXMKI2V6RGVzaWduKHh4eWVhciwgeWVhciwgZGFtYWdlY2F1c2UpCiNlekRlc2lnbih4eHllYXIsIGNvdW50eSwgZGFtYWdlY2F1c2UpCiNlekRlc2lnbih4eHllYXIsIGNvdW50eSwgY29tbW9kaXR5KQoKI05vdyBsZXRzIHN1YnNldCBieSB0aGUgZm91ciBtYWluIGNvbW1vZGl0aWVzIG9mIGludGVyZXN0LgojLS1zdWJzZXQgdG8gZm91ciBjb21tb2RpdGllcyAtIEJhcmxleSwgV2hlYXQsIEFwcGxlcywgYW5kIERyeSBQZWFzCnh4IDwtIHN1YnNldCh4eHllYXIsIGNvbW1vZGl0eSA9PSAiQkFSTEVZIiB8IGNvbW1vZGl0eSA9PSAiV0hFQVQiIHwgCiAgICAgICAgICAgICAgIGNvbW1vZGl0eSA9PSAiQVBQTEVTIiB8IGNvbW1vZGl0eSA9PSAiRFJZIFBFQVMiIHwgY29tbW9kaXR5ID09ICJDSEVSUklFUyIgfCBjb21tb2RpdHkgPT0gIkJBUkxFWSIpCgojLS1zdWJzZXQgdG8gYSBzZWxlY3Qgc2V0IG9mIGRhbWFnZSBjYXVzZXMgLSBEcm91Z2h0LCBIZWF0LCBIYWlsLCBGcm9zdCwgRnJlZXplLCBFeGNlc3NpdmUgTW9pc3R1cmUsIENvbGQgV2ludGVyLCBDb2xkIFdlYXRoZXIsIGFuZCBEZWNsaW5lIGluIFByaWNlCnh4eCA8LSBzdWJzZXQoeHgsIGRhbWFnZWNhdXNlID09ICJEcm91Z2h0IiB8IGRhbWFnZWNhdXNlID09ICJIZWF0IiB8IAogICAgICAgICAgICAgICAgZGFtYWdlY2F1c2UgPT0gIkhhaWwiIHwgZGFtYWdlY2F1c2UgPT0gIkZyb3N0IiB8IGRhbWFnZWNhdXNlID09ICJGcmVlemUiIHwgZGFtYWdlY2F1c2UgPT0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZS9QcmVjaXAvUmFpbiIgfCBkYW1hZ2VjYXVzZSA9PSAiQ29sZCBXaW50ZXIiIHwgCiAgICAgICAgICAgICAgICBkYW1hZ2VjYXVzZSA9PSAiQ29sZCBXZXQgV2VhdGhlciIgfCBkYW1hZ2VjYXVzZSA9PSAiRGVjbGluZSBpbiBQcmljZSIpCgoKI2V4YW1pbmUgbWlzc2luZyBkYXRhIGFmdGVyIG5hcnJvd2luZyBjb21tb2RpdGllcyBhbmQgZGFtYWdlIGNhdXNlcyB0byB0aGUgbW9zdCByZWxldmFudAojZXpEZXNpZ24oeHh4LCB5ZWFyLCBkYW1hZ2VjYXVzZSkKI2V6RGVzaWduKHh4eCwgY291bnR5LCB5ZWFyKQojZXpEZXNpZ24oeHh4LCBjb3VudHksIGRhbWFnZWNhdXNlKQojZXpEZXNpZ24oeHh4LCB5ZWFyLCBjb21tb2RpdHkpCiNlekRlc2lnbih4eHgsIGNvdW50eSwgY29tbW9kaXR5KQoKI3BhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUgPC0geHh4Cgojbm93IGxldHMgZGl2aWRlIHRoZSBkYXRhIGludG8gZm91ciBkaWZmZXJlbnQgbW9kZWwgZmlsZXMgdGhhdCBhcmUgY29tbW9kaXR5IHNwZWNpZmljLgp4eHhfd2hlYXQgPC0gc3Vic2V0KHh4eCwgY29tbW9kaXR5ID09ICJXSEVBVCIpCnh4eF9hcHBsZXMgPC0gc3Vic2V0KHh4eCwgY29tbW9kaXR5ID09ICJBUFBMRVMiKQp4eHhfY2hlcnJpZXMgPC0gc3Vic2V0KHh4eCwgY29tbW9kaXR5ID09ICJDSEVSUklFUyIpCnh4eF9kcnlwZWFzIDwtIHN1YnNldCh4eHgsIGNvbW1vZGl0eSA9PSAiRFJZIFBFQVMiKQp4eHhfYmFybGV5IDwtIHN1YnNldCh4eHgsIGNvbW1vZGl0eSA9PSAiQkFSTEVZIikKCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYXBwbGVzIDwtIHh4eF9hcHBsZXMKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9jaGVycmllcyA8LSB4eHhfY2hlcnJpZXMKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9kcnlwZWFzIDwtIHh4eF9kcnlwZWFzCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQgPC0geHh4X3doZWF0CnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5IDwtIHh4eF9iYXJsZXkKCiMtcmVtb3ZlIGNvdW50aWVzIGZvciBlYWNoIGNvbW1vZGl0eSBmaWxlIHRoYXQgaGF2ZSBjb25zaWRlcmFibGUgbWlzc2luZyBkYXRhLiAgCiN0aGUgcmVhc29uaW5nIGlzIHRoYXQgdGhvc2UgY291bnRpZXMgdGhhdCBoYXZlIHZlcnkgbGl0dGxlIG9mIHRoZSBjb21tb2RpdHkgaW4gcXVlc3Rpb24KI21heSBiZSBpbmFwcHJvcHJpYXRlIHRvIGZpbGwgaW4gZGF0YSBhcyB6ZXJvLiAgV2hpbGUgdGhlcmUgYXJlIHNwb3JhZGljIGNvbW1vZGl0eSBsb3NzCiNmb3IgdGhlc2UgY291bnRpZXMsIHRoZXJlIGlzIGEgaGlnaCBsaWtsaWhvb2QgdGhhdCB0aGlzIGNvbW1vZGl0eSBtYXkgTk9UIGJlIGdyb3duCiNmb3IgdGhlIG1pc3NpbmcgeWVhcnMsIHZzIGp1c3Qgbm8gY29tbW9kaXR5IGxvc3MgY2xhaW1zLiAgU28gd2UgcmVtb3ZlIHRoZXNlIHNlbGVjdAojY291bnRpZXMgZ2l2ZW4gdGhlIEV6RGVzaWduIGRhdGEgcmV2aWV3IG9mIGVhY2ggY29tbW9kaXR5IGZpbGUKCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYXBwbGVzIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHkgIT0gIkNvbHVtYmlhIiAmIGNvdW50eSAhPSAiV2FzY28iKQpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcyRjb3VudHkgPC0gCiAgZmFjdG9yKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYXBwbGVzJGNvdW50eSkKCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYXBwbGVzIDwtIAogIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcywgZGFtYWdlY2F1c2UgIT0gIkRyb3VnaHQiKQpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcyRkYW1hZ2VjYXVzZSA8LSAKICBmYWN0b3IocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9hcHBsZXMkZGFtYWdlY2F1c2UpCgoKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCA8LSAKICBzdWJzZXQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCwgY291bnR5ICE9ICJLb290ZW5haSIpCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkY291bnR5IDwtIAogIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGNvdW50eSkKCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfY2hlcnJpZXMgPC0gCiAgc3Vic2V0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfY2hlcnJpZXMsIGNvdW50eSAhPSAiQWRhbXMiICYgY291bnR5ICE9ICJVbmlvbiIpCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfY2hlcnJpZXMkY291bnR5IDwtIAogIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2NoZXJyaWVzJGNvdW50eSkKCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfZHJ5cGVhcyA8LSAKICBzdWJzZXQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9kcnlwZWFzLCBjb3VudHkgIT0gIkRvdWdsYXMiIAogICAgICAgICAmIGNvdW50eSAhPSAiR2lsbGlhbSIgJiBjb3VudHkgIT0gIkFkYW1zIikKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9kcnlwZWFzJGNvdW50eSA8LSAKICBmYWN0b3IocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9kcnlwZWFzJGNvdW50eSkKCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5IDwtIAogIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2JhcmxleSwgY291bnR5ICE9ICJEb3VnbGFzIiAmIGNvdW50eSAhPSAiR2FyZmllbGQiCiAgICAgICAgICYgY291bnR5ICE9ICJHaWxsaWFtIiAmIGNvdW50eSAhPSAiQWRhbXMiICYgY291bnR5ICE9ICJLb290ZW5haSIgJiBjb3VudHkgIT0gIkJlbnRvbiIpCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5JGNvdW50eSA8LSAKICBmYWN0b3IocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9iYXJsZXkkY291bnR5KQoKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9iYXJsZXkgPC0gCiAgc3Vic2V0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5LCBkYW1hZ2VjYXVzZSAhPSAiQ29sZCBXaW50ZXIiKQpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2JhcmxleSRkYW1hZ2VjYXVzZSA8LSAKICBmYWN0b3IocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9iYXJsZXkkZGFtYWdlY2F1c2UpCgojcmUtZmFjdG9yIAoKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9hcHBsZXMkZGFtYWdlY2F1c2UgPC0gZmFjdG9yKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYXBwbGVzJGRhbWFnZWNhdXNlKQpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGRhbWFnZWNhdXNlIDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGRhbWFnZWNhdXNlKQpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2NoZXJyaWVzJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2NoZXJyaWVzJGRhbWFnZWNhdXNlKQpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2RyeXBlYXMkZGFtYWdlY2F1c2UgPC0gZmFjdG9yKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfZHJ5cGVhcyRkYW1hZ2VjYXVzZSkKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9iYXJsZXkkZGFtYWdlY2F1c2UgPC0gZmFjdG9yKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5JGRhbWFnZWNhdXNlKQoKYGBgCgoKPGRpdiBhbGlnbj0iY2VudGVyIj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPVRSVUUsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gN30KCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGdyaWRFeHRyYSkKCiNwaWUgY2hhcnQgZm9yIDIwMDctMjAxNQoKb3B0aW9ucyhzY2lwZW49OTk5KQoKYWRkTm9BbnN3ZXIgPC0gZnVuY3Rpb24oeCl7CiAgaWYoaXMuZmFjdG9yKHgpKSByZXR1cm4oZmFjdG9yKHgsIGxldmVscz1jKGxldmVscyh4KSwgIk5vIEFuc3dlciIpKSkKICByZXR1cm4oeCkKfQoKQVBQTEVTIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlLCBjb21tb2RpdHkgPT0gIkFQUExFUyIpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1IDwtIGFnZ3JlZ2F0ZShBUFBMRVMkbG9zcywgbGlzdChBUFBMRVMkZGFtYWdlY2F1c2UpLCBGVU4gPSAic3VtIikKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNSkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpCgpwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZSA8LSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1W29yZGVyKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUkbG9zcyksXSAKWCA8LSBwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZVtvcmRlcihwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZSRsb3NzKSxdIAojY29sbmFtZXMoWCkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpCnN1bW1hcnlfZGF0YXNldCA8LSBYICU+JSBmaWx0ZXIobG9zcyA8IDE1MDAwMDApIApzdW1tYXJ5X2RhdGFzZXQyIDwtIFggJT4lIGZpbHRlcihsb3NzID4gMTUwMDAwMCkgCmNvbG5hbWVzKHN1bW1hcnlfZGF0YXNldCkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpClkgPC0gc3VtKHN1bW1hcnlfZGF0YXNldCRsb3NzKQpZWSA8LSBjKCJPdGhlciIsIFkpCllZIDwtIGRhdGEuZnJhbWUodChZWSkpCmNvbG5hbWVzKFlZKSA8LSBjKCJkYW1hZ2VjYXVzZSIsICJsb3NzIikKWVlZIDwtIHJiaW5kKHN1bW1hcnlfZGF0YXNldDIsIFlZKQojZmFjdG9yKFlZWSkKCllZWSA8LSBhcy5kYXRhLmZyYW1lKGxhcHBseShZWVksIGFkZE5vQW5zd2VyKSkKWVlZJGxvc3MgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoWVlZJGxvc3MpKQpZWVkxPC0gWVlZW29yZGVyKFlZWSRsb3NzKSxdIApZWVkxIDwtIFlZWTFbIG5yb3coWVlZMSk6MSwgXQoKIy0teWVhcgpwYWxvdXNlX3N1bWxvc3NfeWVhciA8LSBhZ2dyZWdhdGUoQVBQTEVTJGxvc3MsIGxpc3QoQVBQTEVTJHllYXIpLCBGVU4gPSAic3VtIikKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzX3llYXIpIDwtIGMoInllYXIiLCAibG9zcyIpCgojLS1jb3VudHkKCnBhbG91c2Vfc3VtbG9zc19jb3VudHkgPC0gYWdncmVnYXRlKEFQUExFUyRsb3NzLCBsaXN0KEFQUExFUyRjb3VudHkpLCBGVU4gPSAic3VtIikKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzX2NvdW50eSkgPC0gYygiY291bnR5IiwgImxvc3MiKQoKcCA8LSBwbG90X2x5KFlZWSwgbGFiZWxzID0gfmRhbWFnZWNhdXNlLCB2YWx1ZXMgPSB+bG9zcywgdHlwZSA9ICdwaWUnLAogICAgICAgICAgICAgdGV4dHBvc2l0aW9uID0gJ2luc2lkZScsCiAgICAgICAgICAgICB0ZXh0aW5mbyA9ICdsYWJlbCtwZXJjZW50JywKICAgICAgICAgICAgIGluc2lkZXRleHRmb250ID0gbGlzdChjb2xvciA9ICcjRkZGRkZGJyksCiAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsCiAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCckJywgbG9zcywgJyBtaWxsaW9uJyksCiAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KGNvbG9ycyA9IGNvbG9ycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpc3QoY29sb3IgPSAnI0ZGRkZGRicsIHdpZHRoID0gMSkpLAogICAgICAgICAgICAgI1RoZSAncHVsbCcgYXR0cmlidXRlIGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIHNwYWNlIGJldHdlZW4gdGhlIHNlY3RvcnMKICAgICAgICAgICAgIHNob3dsZWdlbmQgPSBUUlVFKSAlPiUKICBsYXlvdXQodGl0bGUgPSAnVG9wIERhbWFnZSBDYXVzZXMgZm9yIEFQUExFUywgUGFsb3VzZSBSZWdpb246IDE5ODktMjAxNScsCiAgICAgICAgIHhheGlzID0gbGlzdChzaG93Z3JpZCA9IEZBTFNFLCB6ZXJvbGluZSA9IEZBTFNFLCBzaG93dGlja2xhYmVscyA9IEZBTFNFKSwKICAgICAgICAgeWF4aXMgPSBsaXN0KHNob3dncmlkID0gRkFMU0UsIHplcm9saW5lID0gRkFMU0UsIHNob3d0aWNrbGFiZWxzID0gRkFMU0UpKQoKcCA8LSBwbG90X2x5KHBhbG91c2Vfc3VtbG9zc195ZWFyLCBsYWJlbHMgPSB+eWVhciwgdmFsdWVzID0gfmxvc3MsIHR5cGUgPSAncGllJywKICAgICAgICAgICAgIHRleHRwb3NpdGlvbiA9ICdpbnNpZGUnLAogICAgICAgICAgICAgdGV4dGluZm8gPSAnbGFiZWwrcGVyY2VudCcsCiAgICAgICAgICAgICBpbnNpZGV0ZXh0Zm9udCA9IGxpc3QoY29sb3IgPSAnI0ZGRkZGRicpLAogICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLAogICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnJCcsIGxvc3MsICcgbWlsbGlvbicpLAogICAgICAgICAgICAgbWFya2VyID0gbGlzdChjb2xvcnMgPSBjb2xvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJyNGRkZGRkYnLCB3aWR0aCA9IDEpKSwKICAgICAgICAgICAgICNUaGUgJ3B1bGwnIGF0dHJpYnV0ZSBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBzcGFjZSBiZXR3ZWVuIHRoZSBzZWN0b3JzCiAgICAgICAgICAgICBzaG93bGVnZW5kID0gVFJVRSkgJT4lCiAgbGF5b3V0KHRpdGxlID0gJ1RvcCBZZWFycyBmb3IgQVBQTEVTLCBQYWxvdXNlIFJlZ2lvbjogMTk4OS0yMDE1JywKICAgICAgICAgeGF4aXMgPSBsaXN0KHNob3dncmlkID0gRkFMU0UsIHplcm9saW5lID0gRkFMU0UsIHNob3d0aWNrbGFiZWxzID0gRkFMU0UpLAogICAgICAgICB5YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwgemVyb2xpbmUgPSBGQUxTRSwgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSkpCgpwIDwtIHBsb3RfbHkocGFsb3VzZV9zdW1sb3NzX2NvdW50eSwgbGFiZWxzID0gfmNvdW50eSwgdmFsdWVzID0gfmxvc3MsIHR5cGUgPSAncGllJywKICAgICAgICAgICAgIHRleHRwb3NpdGlvbiA9ICdpbnNpZGUnLAogICAgICAgICAgICAgdGV4dGluZm8gPSAnbGFiZWwrcGVyY2VudCcsCiAgICAgICAgICAgICBpbnNpZGV0ZXh0Zm9udCA9IGxpc3QoY29sb3IgPSAnI0ZGRkZGRicpLAogICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLAogICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnJCcsIGxvc3MsICcgbWlsbGlvbicpLAogICAgICAgICAgICAgbWFya2VyID0gbGlzdChjb2xvcnMgPSBjb2xvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJyNGRkZGRkYnLCB3aWR0aCA9IDEpKSwKICAgICAgICAgICAgICNUaGUgJ3B1bGwnIGF0dHJpYnV0ZSBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBzcGFjZSBiZXR3ZWVuIHRoZSBzZWN0b3JzCiAgICAgICAgICAgICBzaG93bGVnZW5kID0gVFJVRSkgJT4lCiAgbGF5b3V0KHRpdGxlID0gJ1RvcCBDb3VudGllcyBmb3IgQVBQTEVTLCBQYWxvdXNlIFJlZ2lvbjogMTk4OS0yMDE1JywKICAgICAgICAgeGF4aXMgPSBsaXN0KHNob3dncmlkID0gRkFMU0UsIHplcm9saW5lID0gRkFMU0UsIHNob3d0aWNrbGFiZWxzID0gRkFMU0UpLAogICAgICAgICB5YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwgemVyb2xpbmUgPSBGQUxTRSwgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSkpCgogICAgICAgICAgIAojcAoKWVlZMiA8LSBZWVkxCllZWTIkbG9zcyA8LSByb3VuZChZWVkyJGxvc3MsIGRpZ2l0cyA9IDApCllZWTIkbG9zcyA8LSBmb3JtYXQoWVlZMiRsb3NzLGJpZy5tYXJrPSIsIixzY2llbnRpZmljPUZBTFNFKQpZWVkyJGxvc3MgPC0gcGFzdGUoIiQiLCBZWVkyJGxvc3MsIHNlcD0iIikKWVlZMiRsb3NzIDwtIGdzdWIoIiAiLCAiIiwgWVlZMiRsb3NzLCBmaXhlZCA9IFRSVUUpCgojLS15ZWFyCnBhbG91c2Vfc3VtbG9zc195ZWFyIDwtIGFnZ3JlZ2F0ZShBUFBMRVMkbG9zcywgbGlzdChBUFBMRVMkeWVhciksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfeWVhcikgPC0gYygieWVhciIsICJsb3NzIikKCiMtLWNvdW50eQoKcGFsb3VzZV9zdW1sb3NzX2NvdW50eSA8LSBhZ2dyZWdhdGUoQVBQTEVTJGxvc3MsIGxpc3QoQVBQTEVTJGNvdW50eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfY291bnR5KSA8LSBjKCJjb3VudHkiLCAibG9zcyIpCgpwYXIobWFyPWMoMTIuNSwgNi4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCmJhcnBsb3QocGFsb3VzZV9zdW1sb3NzX2NvdW50eSRsb3NzLCBuYW1lcy5hcmcgPSBwYWxvdXNlX3N1bWxvc3NfY291bnR5JGNvdW50eSwgY2V4Lm5hbWVzID0gMS40LCBsYXMgPSAzLCB5YXh0PSJuIiwgIGNvbCA9ICJsaWdodGJsdWUiKQpwdHMgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19jb3VudHkkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19jb3VudHkkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKI210ZXh0KHRleHQgPSAiRGFtYWdlIENhdXNlIiwKIyAgICAgIHNpZGUgPSAxLCNzaWRlIDEgPSBib3R0b20KIyAgICAgIGxpbmUgPSA4KQoKdGl0bGUobWFpbj0iQXBwbGVzIGluc3VyYW5jZSBsb3NzIGJ5IGNvbW1vZGl0eTogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJDb3VudGllcyIsIGxpbmU9OCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iSW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKcGFyKG1hcj1jKDEyLjUsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQpiYXJwbG90KHBhbG91c2Vfc3VtbG9zc195ZWFyJGxvc3MsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc195ZWFyJHllYXIsIGNleC5uYW1lcyA9IDEuNCwgbGFzID0gMywgeWF4dD0ibiIsICBjb2wgPSAibGlnaHRibHVlIikKcHRzIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfeWVhciRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX3llYXIkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKI210ZXh0KHRleHQgPSAiWWVhcnMiLAojICAgICAgc2lkZSA9IDEsI3NpZGUgMSA9IGJvdHRvbQojICAgICAgbGluZSA9IDgpCgp0aXRsZShtYWluPSJBcHBsZXMgaW5zdXJhbmNlIGxvc3MgYnkgeWVhcjogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJZZWFycyIsIGxpbmU9OCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iSW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKcGFyKG1hcj1jKDEyLjUsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQpiYXJwbG90KFlZWTEkbG9zcywgbmFtZXMuYXJnID0gWVlZMSRkYW1hZ2VjYXVzZSwgY2V4Lm5hbWVzID0gMS40LCBsYXMgPSAzLCB5YXh0PSJuIiwgIGNvbCA9ICJsaWdodGJsdWUiKQpwdHMgPC0gcHJldHR5KFlZWSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoWVlZJGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCiNtdGV4dCh0ZXh0ID0gIkRhbWFnZSBDYXVzZSIsCiMgICAgICBzaWRlID0gMSwjc2lkZSAxID0gYm90dG9tCiMgICAgICBsaW5lID0gOCkKCnRpdGxlKG1haW49IkFwcGxlcyBpbnN1cmFuY2UgbG9zcyBieSBkYW1hZ2UgY2F1c2U6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iRGFtYWdlIENhdXNlIiwgbGluZT0xMSwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iSW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKCmh0bWxUYWJsZShZWVkyLAogICAgICAgICAgY2dyb3VwID0gYygiMjAwMS0yMDE1IiksCiAgICAgICAgICAgY2FwdGlvbiA9ICJJUE5XIHJlZ2lvbiBBUFBMRVMgdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgZGFtYWdlIGNhdXNlLCAyMDAxLTIwMTUiLAogICAgICAgICAgYWxpZ24gPSAiYyIsCiAgICAgICAgICBybmFtZXMgPSBGQUxTRSwKICAgICAgICAgIGNzcy5jZWxsID0gInBhZGRpbmctbGVmdDogLjVlbTsgcGFkZGluZy1yaWdodDogLjVlbTsiKQoKYGBgCgoKPGRpdiBhbGlnbj0iY2VudGVyIj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPVRSVUUsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gN30KCnN0YXRlcyA8LSByZWFkU2hhcGVQb2x5KCcvZG1pbmUvZGF0YS9zdGF0ZXMvc3RhdGVzLnNocCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvajRzdHJpbmc9Q1JTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpKQogICAgICAgIHByb2plY3Rpb24gPSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpCgojLS1pbnRlcmFjdGlvbiBwbG90IGxvc3MgdnMgeWVhciBmb3IgYWxsIGRhbWFnZSBjYXVzZXMsIGFsbCBQYWxvdXNlIGNvdW50aWVzCgpBUFBMRVMgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUsIGNvbW1vZGl0eSA9PSAiQVBQTEVTIikKCgpsZXZlbHMoQVBQTEVTJGRhbWFnZWNhdXNlKVs4XSA8LSAiRXhjZXNzaXZlIE1vaXN0dXJlIgpBUFBMRVMkZGFtYWdlY2F1c2UgPC0gZmFjdG9yKEFQUExFUyRkYW1hZ2VjYXVzZSkKCkFQUExFU19kYW1hZ2UgPC0gc3Vic2V0KEFQUExFUywgZGFtYWdlY2F1c2UgPT0gIkhhaWwiIHwgZGFtYWdlY2F1c2UgPT0gIkZyb3N0IiB8IGRhbWFnZWNhdXNlID09ICJGcmVlemUiIHwgZGFtYWdlY2F1c2UgPT0gIkNvbGQgV2V0IFdlYXRoZXIiIHwgZGFtYWdlY2F1c2UgPT0gIldpbmQvRXhjZXNzIFdpbmQiIHwgZGFtYWdlY2F1c2UgPT0gIkhlYXQiKQoKQVBQTEVTX2RhbWFnZSRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IoQVBQTEVTX2RhbWFnZSRkYW1hZ2VjYXVzZSkKI2FnZ3JlZ2F0ZShXSEVBVF9kYW1hZ2UkbG9zcywgbGlzdChXSEVBVF9kYW1hZ2UkZGFtYWdlY2F1c2UpLCBGVU4gPSAic3VtIikKCmxpYnJhcnkoc2NhbGVzKQoKQVBQTEVTX2RhbWFnZV90b3AgPC0gc3Vic2V0KEFQUExFU19kYW1hZ2UsIGRhbWFnZWNhdXNlID09ICJIYWlsIiB8IGRhbWFnZWNhdXNlID09ICJGcm9zdCIgfCBkYW1hZ2VjYXVzZSA9PSAiRnJlZXplIikKCkFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUgPC0gYWdncmVnYXRlKEFQUExFU19kYW1hZ2VfdG9wJGxvc3MsIGJ5ID0gbGlzdChBUFBMRVNfZGFtYWdlX3RvcCRjb3VudHkpLCBGVU4gPSAic3VtIikKY29sbmFtZXMoQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZSkgPC0gYygiTkFNRSIsICJsb3NzIikKCmNvdW50eV9hcHBsZXNfaGFpbGZyb3N0ZnJlZXplIDwtIG1lcmdlKGNvdW50aWVzLCBBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplLCBieSA9ICJOQU1FIikKCiMyMDEzCgpBUFBMRVNfZGFtYWdlX3RvcDIwMTMgPC0gc3Vic2V0KEFQUExFU19kYW1hZ2UsIGRhbWFnZWNhdXNlID09ICJIYWlsIiB8IGRhbWFnZWNhdXNlID09ICJGcm9zdCIgfCBkYW1hZ2VjYXVzZSA9PSAiRnJlZXplIikKQVBQTEVTX2RhbWFnZV90b3AyMDEzIDwtIHN1YnNldChBUFBMRVNfZGFtYWdlX3RvcDIwMTMsIHllYXIgPT0gMjAxMykKCgoKQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTMgPC0gYWdncmVnYXRlKEFQUExFU19kYW1hZ2VfdG9wMjAxMyRsb3NzLCBieSA9IGxpc3QoQVBQTEVTX2RhbWFnZV90b3AyMDEzJGNvdW50eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplMjAxMykgPC0gYygiTkFNRSIsICJsb3NzIikKCmNvdW50eV9hcHBsZXNfaGFpbGZyb3N0ZnJlZXplMjAxMyA8LSBtZXJnZShjb3VudGllcywgQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTMsIGJ5ID0gIk5BTUUiKQoKIzIwMDYKCkFQUExFU19kYW1hZ2VfdG9wMjAwNiA8LSBzdWJzZXQoQVBQTEVTX2RhbWFnZSwgZGFtYWdlY2F1c2UgPT0gIkhhaWwiIHwgZGFtYWdlY2F1c2UgPT0gIkZyb3N0IiB8IGRhbWFnZWNhdXNlID09ICJGcmVlemUiKQpBUFBMRVNfZGFtYWdlX3RvcDIwMDYgPC0gc3Vic2V0KEFQUExFU19kYW1hZ2VfdG9wMjAwNiwgeWVhciA9PSAyMDA2KQoKCgpBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplMjAwNiA8LSBhZ2dyZWdhdGUoQVBQTEVTX2RhbWFnZV90b3AyMDA2JGxvc3MsIGJ5ID0gbGlzdChBUFBMRVNfZGFtYWdlX3RvcDIwMDYkY291bnR5KSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKEFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUyMDA2KSA8LSBjKCJOQU1FIiwgImxvc3MiKQoKY291bnR5X2FwcGxlc19oYWlsZnJvc3RmcmVlemUyMDA2IDwtIG1lcmdlKGNvdW50aWVzLCBBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplMjAwNiwgYnkgPSAiTkFNRSIpCgoKI2hvdyBtYW55IGNsYWltcyBvZiBoYWlsIGluIHdhbGxhIHdhbGxhIGluIDIwMDY/ICAyIQoKYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZV9jb3VudDIwMDYgPC0gc3Vic2V0KGNvdW50X3BhbG91c2VfY291bnQsIGNvbW1vZGl0eSA9PSAiQVBQTEVTIikKYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZV9jb3VudDIwMDYgPC0gc3Vic2V0KGFwcGxlc19oYWlsZnJvc3RmcmVlemVfY291bnQyMDA2LCB5ZWFyID09ICIyMDA2IikKYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZV9jb3VudDIwMDYgPC0gc3Vic2V0KGFwcGxlc19oYWlsZnJvc3RmcmVlemVfY291bnQyMDA2LCBkYW1hZ2VjYXVzZSA9PSAiSGFpbCIgfCBkYW1hZ2VjYXVzZSA9PSAiRnJvc3QiIHwgZGFtYWdlY2F1c2UgPT0gIkZyZWV6ZSIpCgoKYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZV9jb3VudDIwMDZfc3VtIDwtIGFnZ3JlZ2F0ZShhcHBsZXNfaGFpbGZyb3N0ZnJlZXplX2NvdW50MjAwNiRjb3VudCwgYnk9bGlzdChhcHBsZXNfaGFpbGZyb3N0ZnJlZXplX2NvdW50MjAwNiRjb3VudHkpLCBGVU4gPSAic3VtIikKY29sbmFtZXMoYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZV9jb3VudDIwMDZfc3VtKSA8LSBjKCJjb3VudHkiLCAiY291bnQiKQoKCgojMjAxNQoKQVBQTEVTX2RhbWFnZV90b3AyMDE1IDwtIHN1YnNldChBUFBMRVNfZGFtYWdlLCBkYW1hZ2VjYXVzZSA9PSAiSGFpbCIgfCBkYW1hZ2VjYXVzZSA9PSAiRnJvc3QiIHwgZGFtYWdlY2F1c2UgPT0gIkZyZWV6ZSIpCkFQUExFU19kYW1hZ2VfdG9wMjAxNSA8LSBzdWJzZXQoQVBQTEVTX2RhbWFnZV90b3AyMDE1LCB5ZWFyID09IDIwMTUpCgoKCkFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUyMDE1IDwtIGFnZ3JlZ2F0ZShBUFBMRVNfZGFtYWdlX3RvcDIwMTUkbG9zcywgYnkgPSBsaXN0KEFQUExFU19kYW1hZ2VfdG9wMjAxNSRjb3VudHkpLCBGVU4gPSAic3VtIikKY29sbmFtZXMoQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTUpIDwtIGMoIk5BTUUiLCAibG9zcyIpCgpjb3VudHlfYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZTIwMTUgPC0gbWVyZ2UoY291bnRpZXMsIEFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUyMDE1LCBieSA9ICJOQU1FIikKCgojMjAxMgoKQVBQTEVTX2RhbWFnZV90b3AyMDEyIDwtIHN1YnNldChBUFBMRVNfZGFtYWdlLCBkYW1hZ2VjYXVzZSA9PSAiSGFpbCIgfCBkYW1hZ2VjYXVzZSA9PSAiRnJvc3QiIHwgZGFtYWdlY2F1c2UgPT0gIkZyZWV6ZSIpCkFQUExFU19kYW1hZ2VfdG9wMjAxMiA8LSBzdWJzZXQoQVBQTEVTX2RhbWFnZV90b3AyMDEyLCB5ZWFyID09IDIwMTIpCgoKCkFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUyMDEyIDwtIGFnZ3JlZ2F0ZShBUFBMRVNfZGFtYWdlX3RvcDIwMTIkbG9zcywgYnkgPSBsaXN0KEFQUExFU19kYW1hZ2VfdG9wMjAxMiRjb3VudHkpLCBGVU4gPSAic3VtIikKY29sbmFtZXMoQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTIpIDwtIGMoIk5BTUUiLCAibG9zcyIpCgpjb3VudHlfYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZTIwMTIgPC0gbWVyZ2UoY291bnRpZXMsIEFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUyMDEyLCBieSA9ICJOQU1FIikKCgoKI2dncGxvdChBUFBMRVNfZGFtYWdlX3RvcCwgYWVzKGZpbGw9ZGFtYWdlY2F1c2UsIHk9bG9zcywgeD15ZWFyKSkgKyAKIyAgICBnZW9tX2Jhciggc3RhdD0iaWRlbnRpdHkiKSArIHRoZW1lX2J3KCkgKyBnZ3RpdGxlKCJJUE5XIGFwcGxlcyBsb3NzIHZzLiB5ZWFyIC0gdG9wIGRhbWFnZSBjYXVzZXMiKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFtaWx5ID0gIlNlcmlmIikpICArICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cz1jKDIwMDE6MjAxNSkpICsgdGhlbWUobGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTQpKSArIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiwgZmFjZSA9ICJib2xkIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE4KSkgKyBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWwgPSB1bml0X2Zvcm1hdCh1bml0ID0gIk0iLCBzY2FsZSA9IDFlLTYsIGRpZ2l0cyA9IDApKQoKcGFyKG1hciA9IGMoNSwgNSwgNCwgMSkpCgpnZ3Bsb3QoQVBQTEVTX2RhbWFnZV90b3AsIGFlcyhmaWxsPWRhbWFnZWNhdXNlLCB5PWxvc3MsIHg9eWVhcikpICsgCiAgICBnZW9tX2Jhciggc3RhdD0iaWRlbnRpdHkiKSArIHRoZW1lX2J3KCkgKyB0aGVtZShwYW5lbC5ncmlkLm1ham9yPWVsZW1lbnRfYmxhbmsoKSxwYW5lbC5ncmlkLm1pbm9yPWVsZW1lbnRfYmxhbmsoKSkgKyBnZ3RpdGxlKCJJUE5XIGFwcGxlcyBsb3NzIHZzLiB5ZWFyIC0gdG9wIGRhbWFnZSBjYXVzZXMiKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0yOCwgZmFtaWx5ID0gIlNlcmlmIikpICArICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSAiWWVhcnMiLCBsaW1pdHM9YygyMDAxOjIwMTUpKSArIHRoZW1lKGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE0KSkgKyBzY2FsZV9maWxsX21hbnVhbCgibGVnZW5kIiwgdmFsdWVzID0gYygiSGFpbCIgPSAicmVkIiwgIkZyb3N0IiA9ICJibHVlIiwgIkZyZWV6ZSIgPSAiZ3JheSIpKSArIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiwgZmFjZSA9ICJib2xkIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTI0LCBmYW1pbHkgPSAiU2VyaWYiLCBmYWNlID0gImJvbGQiKSkgKyBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJJbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsYWJlbCA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiTSIsIHNjYWxlID0gMWUtNiwgZGlnaXRzID0gMCkpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKQoKCmFwcGxlcyA8LSBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcwojaSA8LSBpbnRlcmFjdGlvbi5wbG90KHguZmFjdG9yICAgICA9IGFwcGxlcyR5ZWFyLAojICAgICAgICAgICAgICAgICB0cmFjZS5mYWN0b3IgPSBhcHBsZXMkZGFtYWdlY2F1c2UsIAojICAgICAgICAgICAgICAgICB0cmFjZS5sYWJlbCA9ICJhcHBsZXMiLAojICAgICAgICAgICAgICAgICByZXNwb25zZSAgICAgPSBhcHBsZXMkbG9zcywgCiMgICAgICAgICAgICAgICAgIGZ1biA9IHN1bSwKIyAgICAgICAgICAgICAgICAgbGFzID0gMywKIyAgICAgICAgICAgICAgICAgdHlwZT0icCIsCiMgICAgICAgICAgICAgICAgIGNvbD1jKCJibGFjayIsInJlZCIsImdyZWVuIiksICAjIyMgQ29sb3JzIGZvciBsZXZlbHMgb2YgdHJhY2UgdmFyLgojICAgICAgICAgICAgICAgICBwY2g9YygxOSwgMTcsIDE1LCAxNCwgMTMpLCAgICAgICAgICAgICAjIyMgU3ltYm9scyBmb3IgbGV2ZWxzIG9mIHRyYWNlIHZhci4KIyAgICAgICAgICAgICAgICAgZml4ZWQ9VFJVRSwgICAgICAgICAgICAgICAgICAgICMjIyBPcmRlciBieSBmYWN0b3Igb3JkZXIgaW4gZGF0YQojICAgICAgICAgICAgICAgICBsZWcuYnR5ID0gIm4iLAojICAgICAgICAgICAgICAgICB5bGFiPSIiLAojICAgICAgICAgICAgICAgICB4bGFiPSJZZWFyIiwKIyAgICAgICAgICAgICAgICAgbWFpbj0iSW50ZXJhY3Rpb24gUGxvdCAtIEFQUExFUyBMb3NzIHZzLiB5ZWFyIC0gdG9wIGRhbWFnZSBjYXVzZXMiLCBsYXMgPSAyKQoKI0VEQSBmb3IgYXBwbGVzCiMtYm94cGxvdHMgb2YgZGF0YSBieSBjdWJlIGxvc3MgYnkgZWFjaCBvZiB0aGUgdGhyZWUgZmFjdG9ycwpwYXIobWFyPWMoOCw4LDQsMiksIGZhbWlseSA9ICdzZXJpZicsIG1ncCA9IGMoNSwgMSwgMCkpIApib3hwbG90KGxvZzEwX2xvc3MgfiB5ZWFyLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcywgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9hcHBsZXMkbG9nMTBsb3NzKQpwdHMyIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcyRsb2cxMGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCBzZXAgPSAiIikpCgp0aXRsZShtYWluPSJMb2dyaXRobWljIHRyYW5zZm9ybTogSVBOVyBhcHBsZXMgaW5zdXJhbmNlIGxvc3MgYnkgeWVhciIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IkxvZzEwIGluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCnN0cmlwY2hhcnQobG9nMTBfbG9zcyB+IHllYXIsIGRhdGEgPSBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcywgdmVydGljYWwgPSBUUlVFLCAKICAgIG1ldGhvZCA9ICJqaXR0ZXIiLCBhZGQgPSBUUlVFLCBwY2ggPSAyMCwgY29sID0gJ2JsdWUnKQoKcGFyKG1hcj1jKDExLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgpib3hwbG90KGxvZzEwX2xvc3MgfiBkYW1hZ2VjYXVzZSwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9hcHBsZXMsIHlheHQgPSAnbicsIGNvbCA9ICJsaWdodGJsdWUiLCBsYXMgPSAzLCBjZXgubWFpbiA9IDEuNSwgY2V4LmxhYiA9IDEuNCwgY2V4LmF4aXMgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxLCBvdXRsaW5lID0gRkFMU0UpCgpwdHMgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYXBwbGVzJGxvZzEwbG9zcykKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9hcHBsZXMkbG9nMTBsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgc2VwID0gIiIpKQoKdGl0bGUobWFpbj0iTG9ncml0aG1pYyB0cmFuc2Zvcm06IElQTlcgYXBwbGVzIGluc3VyYW5jZSBsb3NzXG5ieSBkYW1hZ2UgY2F1c2UiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkRhbWFnZSBDYXVzZSIsIGxpbmU9NywgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iTG9nMTAgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKc3RyaXBjaGFydChsb2cxMF9sb3NzIH4gZGFtYWdlY2F1c2UsIGRhdGEgPSBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcywgdmVydGljYWwgPSBUUlVFLCAKICAgIG1ldGhvZCA9ICJqaXR0ZXIiLCBhZGQgPSBUUlVFLCBwY2ggPSAyMCwgY29sID0gJ2JsdWUnKQoKCnBhcihtYXI9YygxMSw4LDYsMiksIGZhbWlseSA9ICdzZXJpZicsIG1ncCA9IGMoNSwgMSwgMCkpIAoKYm94cGxvdChsb2cxMF9sb3NzIH4gY291bnR5LCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcywgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9hcHBsZXMkbG9nMTBsb3NzKQpwdHMyIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcyRsb2cxMGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCBzZXAgPSAiIikpCgp0aXRsZShtYWluPSJMb2dyaXRobWljIHRyYW5zZm9ybTogSVBOVyBhcHBsZXMgaW5zdXJhbmNlIGxvc3NcbmJ5IGNvdW50eSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iQ291bnRpZXMiLCBsaW5lPTcsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IkxvZzEwIGluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCgpzdHJpcGNoYXJ0KGxvZzEwX2xvc3MgfiBjb3VudHksIGRhdGEgPSBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2FwcGxlcywgdmVydGljYWwgPSBUUlVFLCAKICAgIG1ldGhvZCA9ICJqaXR0ZXIiLCBhZGQgPSBUUlVFLCBwY2ggPSAyMCwgY29sID0gJ2JsdWUnKQoKCgojLS0KCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc1tjb3VudGllcyROQU1FICE9ICJMZXdpcyIsXQpjb3VudGllc19hcHBsZXMgPC0gY291bnRpZXNfYXBwbGVzW2NvdW50aWVzX2FwcGxlcyROQU1FICE9ICJMaW5jb2xuIixdCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc19hcHBsZXNbY291bnRpZXNfYXBwbGVzJE5BTUUgIT0gIktvb3RlbmFpIixdCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc19hcHBsZXNbY291bnRpZXNfYXBwbGVzJE5BTUUgIT0gIkdhcmZpZWxkIixdCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc19hcHBsZXNbY291bnRpZXNfYXBwbGVzJE5BTUUgIT0gIldhbGxvd2EiLF0KY291bnRpZXNfYXBwbGVzIDwtIGNvdW50aWVzX2FwcGxlc1tjb3VudGllc19hcHBsZXMkTkFNRSAhPSAiTmV6IFBlcmNlIixdCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc19hcHBsZXNbY291bnRpZXNfYXBwbGVzJE5BTUUgIT0gIkxhdGFoIixdCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc19hcHBsZXNbY291bnRpZXNfYXBwbGVzJE5BTUUgIT0gIlNoZXJtYW4iLF0KY291bnRpZXNfYXBwbGVzIDwtIGNvdW50aWVzX2FwcGxlc1tjb3VudGllc19hcHBsZXMkTkFNRSAhPSAiTW9ycm93IixdCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc19hcHBsZXNbY291bnRpZXNfYXBwbGVzJE5BTUUgIT0gIlVuaW9uIixdCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc19hcHBsZXNbY291bnRpZXNfYXBwbGVzJE5BTUUgIT0gIldoaXRtYW4iLF0KY291bnRpZXNfYXBwbGVzIDwtIGNvdW50aWVzX2FwcGxlc1tjb3VudGllc19hcHBsZXMkTkFNRSAhPSAiQXNvdGluIixdCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc19hcHBsZXNbY291bnRpZXNfYXBwbGVzJE5BTUUgIT0gIkJlbmV3YWgiLF0KY291bnRpZXNfYXBwbGVzIDwtIGNvdW50aWVzX2FwcGxlc1tjb3VudGllc19hcHBsZXMkTkFNRSAhPSAiU3Bva2FuZSIsXQpjb3VudGllc19hcHBsZXMgPC0gY291bnRpZXNfYXBwbGVzW2NvdW50aWVzX2FwcGxlcyROQU1FICE9ICJDbGVhcndhdGVyIixdCmNvdW50aWVzX2FwcGxlcyA8LSBjb3VudGllc19hcHBsZXNbY291bnRpZXNfYXBwbGVzJE5BTUUgIT0gIkdpbGxpYW0iLF0KY291bnRpZXNfYXBwbGVzIDwtIGNvdW50aWVzX2FwcGxlc1tjb3VudGllc19hcHBsZXMkTkFNRSAhPSAiSWRhaG8iLF0KY291bnRpZXNfYXBwbGVzIDwtIGNvdW50aWVzX2FwcGxlc1tjb3VudGllc19hcHBsZXMkTkFNRSAhPSAiV2FzY28iLF0KCmNvdW50aWVzX2FwcGxlcyROQU1FIDwtIGZhY3Rvcihjb3VudGllc19hcHBsZXMkTkFNRSkKCmxhYnMyIDwtIGxhcHBseShzZXEobnJvdyhjb3VudGllc19hcHBsZXNAZGF0YSkpLCBmdW5jdGlvbihpKSB7CiAgICAgICAgcGFzdGUwKGFzLmNoYXJhY3Rlcihjb3VudGllc19hcHBsZXNAZGF0YVtpLCAiTkFNRSJdKSkKICAgICAgfSkKCgojLS0tLS0yMDAxIC0gMjAxNQoKIHBhbCA8LSBjb2xvck51bWVyaWMoY29sb3JSYW1wUGFsZXR0ZShjKCJsaWdodGJsdWUiLCAiYmx1ZSIpKSgxMSksIG5hLmNvbG9yID0gIiNmZmZmZmYiLAogICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZXZhbChwYXJzZSh0ZXh0PXBhc3RlKCJjb3VudHlfYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZSQiLCAibG9zcyIsIHNlcD0iIikpKSkKCm1hcCA8LSBsZWFmbGV0KGRhdGEgPSBjb3VudHlfYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZSwgb3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21Db250cm9sID0gRkFMU0UsIHpvb21TbmFwID0gMC4xKSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JQogIAogIGFkZE1pbmlNYXAoCiAgICB0aWxlcyA9IHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaXRlLAogICAgcG9zaXRpb24gPSAndG9wbGVmdCcsIAogICAgd2lkdGggPSAyMDAsIGhlaWdodCA9IDIwMCwKICAgIHRvZ2dsZURpc3BsYXkgPSBGQUxTRSkgJT4lCiAgCiAgCiAgICNhZGRDb250cm9sKHRpdGxlLCBwb3NpdGlvbiA9ICJ0b3BsZWZ0IiwgY2xhc3NOYW1lPSJtYXAtdGl0bGUiKSAlPiUKICAKICAKICBmaXRCb3VuZHMoZXh0ZVsxXSwgZXh0ZVszXSwgZXh0ZVsyXSwgZXh0ZVs0XSkgJT4lIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5wYWwoY291bnR5X2FwcGxlc19oYWlsZnJvc3RmcmVlemUkbG9zcyksICBmaWxsT3BhY2l0eSA9IC44LCB3ZWlnaHQgPSAxLCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIGFkZFBvbHlnb25zKGRhdGEgPSBzdGF0ZXMsIGZpbGxPcGFjaXR5ID0gMCwgd2VpZ2h0ID0gNCwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSAKICAKICAgIGFkZExlZ2VuZChwYWwgPSBwYWwsIHZhbHVlcyA9IG5hLm9taXQofmxvc3MpLCBncm91cCA9ICJjaXJjbGVzIiwgdGl0bGUgPSBwYXN0ZSgiQXBwbGVzIGhhaWwgZnJvc3Q8YnI+ZnJlZXplIDIwMDEgdG8gMjAxNSIsIHNlcCA9ICIiKSwgbmEubGFiZWwgPSAiIiwgcG9zaXRpb24gPSAidG9wcmlnaHQiLCBsYWJGb3JtYXQgPSBsYWJlbEZvcm1hdChwcmVmaXggPSAiJCIpKSAlPiUKCgphZGRMYWJlbE9ubHlNYXJrZXJzKGRhdGEgPSBjb3VudHlfYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZSwgbG5nID0gbGF0X2xvbmdbLDFdLCBsYXQgPSBsYXRfbG9uZ1ssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMsIEhUTUwpLCBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoc3R5bGUgPSBsaXN0KCJmb250LWZhbWlseSIgPSAic2VyaWYiKSwgbm9IaWRlID0gVFJVRSwgZGlyZWN0aW9uID0gJ21pZGRsZScsIHRleHRPbmx5ID0gVFJVRSwgdGV4dHNpemUgPSAiMThweCIsIGNvbCA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCikpIAogICAgICAgIAphZGRTY2FsZUJhcihtYXAsIHBvc2l0aW9uID0gYygidG9wcmlnaHQiKSwgb3B0aW9ucyA9IHNjYWxlQmFyT3B0aW9ucygpKQoKcGFyKG1hcj1jKDguNSwgNi4xLCA2LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg1LCAxLCAwKSwgbGFzPTApCiAgYmFycGxvdChBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplJGxvc3MsIG5hbWVzLmFyZyA9IEFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUkTkFNRSwgeWF4dD0ibiIsIGxhcyA9IDIsIGNvbCA9ICJsaWdodGJsdWUiLCBjZXgubGFiID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSkKcHRzIDwtIHByZXR0eShBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplJGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKdGl0bGUobWFpbj0iSVBOVyBhcHBsZXMgaW5zdXJhbmNlIGxvc3MgZHVlIHRvIGhhaWwsIGZyb3N0LCBhbmQgZnJlZXplXG4yMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT03LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJBcHBsZXMgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKCiMtMjAxMwoKCiBwYWwgPC0gY29sb3JOdW1lcmljKGNvbG9yUmFtcFBhbGV0dGUoYygibGlnaHRibHVlIiwgImJsdWUiKSkoMTEpLCBuYS5jb2xvciA9ICIjZmZmZmZmIiwKICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9IGV2YWwocGFyc2UodGV4dD1wYXN0ZSgiY291bnR5X2FwcGxlc19oYWlsZnJvc3RmcmVlemUyMDEzJCIsICJsb3NzIiwgc2VwPSIiKSkpKQoKbWFwIDwtIGxlYWZsZXQoZGF0YSA9IGNvdW50eV9hcHBsZXNfaGFpbGZyb3N0ZnJlZXplMjAxMywgb3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21Db250cm9sID0gRkFMU0UsIHpvb21TbmFwID0gMC4xKSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JQogIAogIGFkZE1pbmlNYXAoCiAgICB0aWxlcyA9IHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaXRlLAogICAgcG9zaXRpb24gPSAndG9wbGVmdCcsIAogICAgd2lkdGggPSAyMDAsIGhlaWdodCA9IDIwMCwKICAgIHRvZ2dsZURpc3BsYXkgPSBGQUxTRSkgJT4lCiAgCiAgCiAgICNhZGRDb250cm9sKHRpdGxlLCBwb3NpdGlvbiA9ICJ0b3BsZWZ0IiwgY2xhc3NOYW1lPSJtYXAtdGl0bGUiKSAlPiUKICAKICAKICBmaXRCb3VuZHMoZXh0ZVsxXSwgZXh0ZVszXSwgZXh0ZVsyXSwgZXh0ZVs0XSkgJT4lIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5wYWwoY291bnR5X2FwcGxlc19oYWlsZnJvc3RmcmVlemUyMDEzJGxvc3MpLCAgZmlsbE9wYWNpdHkgPSAuOCwgd2VpZ2h0ID0gMSwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSBhZGRQb2x5Z29ucyhkYXRhID0gc3RhdGVzLCBmaWxsT3BhY2l0eSA9IDAsIHdlaWdodCA9IDQsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgCiAgCiAgICBhZGRMZWdlbmQocGFsID0gcGFsLCB2YWx1ZXMgPSBuYS5vbWl0KH5sb3NzKSwgZ3JvdXAgPSAiY2lyY2xlcyIsIHRpdGxlID0gcGFzdGUoIkFwcGxlcyBoYWlsIGZyb3N0PGJyPmZyZWV6ZSAyMDEzIiwgc2VwID0gIiIpLCBuYS5sYWJlbCA9ICIiLCBwb3NpdGlvbiA9ICJ0b3ByaWdodCIsIGxhYkZvcm1hdCA9IGxhYmVsRm9ybWF0KHByZWZpeCA9ICIkIikpICU+JQoKCmFkZExhYmVsT25seU1hcmtlcnMoZGF0YSA9IGNvdW50eV9hcHBsZXNfaGFpbGZyb3N0ZnJlZXplMjAxMywgbG5nID0gbGF0X2xvbmdbLDFdLCBsYXQgPSBsYXRfbG9uZ1ssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMsIEhUTUwpLCBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoc3R5bGUgPSBsaXN0KCJmb250LWZhbWlseSIgPSAic2VyaWYiKSwgbm9IaWRlID0gVFJVRSwgZGlyZWN0aW9uID0gJ21pZGRsZScsIHRleHRPbmx5ID0gVFJVRSwgdGV4dHNpemUgPSAiMThweCIsIGNvbCA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCikpIAogICAgICAgIAphZGRTY2FsZUJhcihtYXAsIHBvc2l0aW9uID0gYygidG9wcmlnaHQiKSwgb3B0aW9ucyA9IHNjYWxlQmFyT3B0aW9ucygpKQoKcGFyKG1hcj1jKDguNSwgNi4xLCA2LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg1LCAxLCAwKSwgbGFzPTApCiAgYmFycGxvdChBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplMjAxMyRsb3NzLCBuYW1lcy5hcmcgPSBBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplMjAxMyROQU1FLCB5YXh0PSJuIiwgbGFzID0gMiwgY29sID0gImxpZ2h0Ymx1ZSIsIGNleC5sYWIgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxKQpwdHMgPC0gcHJldHR5KEFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUyMDEzJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplMjAxMyRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCnRpdGxlKG1haW49IklQTlcgYXBwbGVzIGluc3VyYW5jZSBsb3NzIGR1ZSB0byBoYWlsLCBmcm9zdCwgYW5kIGZyZWV6ZVxuMjAxMyIsIGxpbmUgPSAyLCBhZGogPSAwLCBjZXgubWFpbiA9IDEuOSkKdGl0bGUoeGxhYj0iQ291bnRpZXMiLCBsaW5lPTcsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IkFwcGxlcyBpbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCgojLTIwMTIKCgogcGFsIDwtIGNvbG9yTnVtZXJpYyhjb2xvclJhbXBQYWxldHRlKGMoImxpZ2h0Ymx1ZSIsICJibHVlIikpKDExKSwgbmEuY29sb3IgPSAiI2ZmZmZmZiIsCiAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSBldmFsKHBhcnNlKHRleHQ9cGFzdGUoImNvdW50eV9hcHBsZXNfaGFpbGZyb3N0ZnJlZXplMjAxMiQiLCAibG9zcyIsIHNlcD0iIikpKSkKCm1hcCA8LSBsZWFmbGV0KGRhdGEgPSBjb3VudHlfYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZTIwMTIsIG9wdGlvbnMgPSBsZWFmbGV0T3B0aW9ucyh6b29tQ29udHJvbCA9IEZBTFNFLCB6b29tU25hcCA9IDAuMSkpICU+JSAgCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkSHlkZGEuQmFzZSkgJT4lCiAgIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJFN0YW1lbi5Ub25lckxpbmVzKSAlPiUKICAKICBhZGRNaW5pTWFwKAogICAgdGlsZXMgPSBwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGl0ZSwKICAgIHBvc2l0aW9uID0gJ3RvcGxlZnQnLCAKICAgIHdpZHRoID0gMjAwLCBoZWlnaHQgPSAyMDAsCiAgICB0b2dnbGVEaXNwbGF5ID0gRkFMU0UpICU+JQogIAogIAogICAjYWRkQ29udHJvbCh0aXRsZSwgcG9zaXRpb24gPSAidG9wbGVmdCIsIGNsYXNzTmFtZT0ibWFwLXRpdGxlIikgJT4lCiAgCiAgCiAgZml0Qm91bmRzKGV4dGVbMV0sIGV4dGVbM10sIGV4dGVbMl0sIGV4dGVbNF0pICU+JSBhZGRQb2x5Z29ucyhmaWxsQ29sb3IgPSB+cGFsKGNvdW50eV9hcHBsZXNfaGFpbGZyb3N0ZnJlZXplMjAxMiRsb3NzKSwgIGZpbGxPcGFjaXR5ID0gLjgsIHdlaWdodCA9IDEsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgYWRkUG9seWdvbnMoZGF0YSA9IHN0YXRlcywgZmlsbE9wYWNpdHkgPSAwLCB3ZWlnaHQgPSA0LCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIAogIAogICAgYWRkTGVnZW5kKHBhbCA9IHBhbCwgdmFsdWVzID0gbmEub21pdCh+bG9zcyksIGdyb3VwID0gImNpcmNsZXMiLCB0aXRsZSA9IHBhc3RlKCJBcHBsZXMgaGFpbCBmcm9zdDxicj5mcmVlemUgMjAxMiIsIHNlcCA9ICIiKSwgbmEubGFiZWwgPSAiIiwgcG9zaXRpb24gPSAidG9wcmlnaHQiLCBsYWJGb3JtYXQgPSBsYWJlbEZvcm1hdChwcmVmaXggPSAiJCIpKSAlPiUKCgphZGRMYWJlbE9ubHlNYXJrZXJzKGRhdGEgPSBjb3VudHlfYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZTIwMTIsIGxuZyA9IGxhdF9sb25nWywxXSwgbGF0ID0gbGF0X2xvbmdbLDJdLCBsYWJlbCA9IGxhcHBseShsYWJzLCBIVE1MKSwgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKHN0eWxlID0gbGlzdCgiZm9udC1mYW1pbHkiID0gInNlcmlmIiksIG5vSGlkZSA9IFRSVUUsIGRpcmVjdGlvbiA9ICdtaWRkbGUnLCB0ZXh0T25seSA9IFRSVUUsIHRleHRzaXplID0gIjE4cHgiLCBjb2wgPSAid2hpdGUiLCAgb2Zmc2V0ID0gYygyMCwgMCksIG1hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQopKSAKICAgICAgICAKYWRkU2NhbGVCYXIobWFwLCBwb3NpdGlvbiA9IGMoInRvcHJpZ2h0IiksIG9wdGlvbnMgPSBzY2FsZUJhck9wdGlvbnMoKSkKCnBhcihtYXI9Yyg4LjUsIDYuMSwgNiwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNSwgMSwgMCksIGxhcz0wKQogIGJhcnBsb3QoQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTIkbG9zcywgbmFtZXMuYXJnID0gQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTIkTkFNRSwgeWF4dD0ibiIsIGxhcyA9IDIsIGNvbCA9ICJsaWdodGJsdWUiLCBjZXgubGFiID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSkKcHRzIDwtIHByZXR0eShBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplMjAxMiRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTIkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQp0aXRsZShtYWluPSJJUE5XIGFwcGxlcyBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gaGFpbCwgZnJvc3QsIGFuZCBmcmVlemVcbjIwMTIiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT03LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJBcHBsZXMgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKCgoKIy0yMDA2CgoKIHBhbCA8LSBjb2xvck51bWVyaWMoY29sb3JSYW1wUGFsZXR0ZShjKCJsaWdodGJsdWUiLCAiYmx1ZSIpKSgxMSksIG5hLmNvbG9yID0gIiNmZmZmZmYiLAogICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZXZhbChwYXJzZSh0ZXh0PXBhc3RlKCJjb3VudHlfYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZTIwMDYkIiwgImxvc3MiLCBzZXA9IiIpKSkpCgptYXAgPC0gbGVhZmxldChkYXRhID0gY291bnR5X2FwcGxlc19oYWlsZnJvc3RmcmVlemUyMDA2LCBvcHRpb25zID0gbGVhZmxldE9wdGlvbnMoem9vbUNvbnRyb2wgPSBGQUxTRSwgem9vbVNuYXAgPSAwLjEpKSAlPiUgIAogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJEh5ZGRhLkJhc2UpICU+JQogICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaW5lcykgJT4lCiAgCiAgYWRkTWluaU1hcCgKICAgIHRpbGVzID0gcHJvdmlkZXJzJFN0YW1lbi5Ub25lckxpdGUsCiAgICBwb3NpdGlvbiA9ICd0b3BsZWZ0JywgCiAgICB3aWR0aCA9IDIwMCwgaGVpZ2h0ID0gMjAwLAogICAgdG9nZ2xlRGlzcGxheSA9IEZBTFNFKSAlPiUKICAKICAKICAgI2FkZENvbnRyb2wodGl0bGUsIHBvc2l0aW9uID0gInRvcGxlZnQiLCBjbGFzc05hbWU9Im1hcC10aXRsZSIpICU+JQogIAogIAogIGZpdEJvdW5kcyhleHRlWzFdLCBleHRlWzNdLCBleHRlWzJdLCBleHRlWzRdKSAlPiUgYWRkUG9seWdvbnMoZmlsbENvbG9yID0gfnBhbChjb3VudHlfYXBwbGVzX2hhaWxmcm9zdGZyZWV6ZTIwMDYkbG9zcyksICBmaWxsT3BhY2l0eSA9IC44LCB3ZWlnaHQgPSAxLCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIGFkZFBvbHlnb25zKGRhdGEgPSBzdGF0ZXMsIGZpbGxPcGFjaXR5ID0gMCwgd2VpZ2h0ID0gNCwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSAKICAKICAgIGFkZExlZ2VuZChwYWwgPSBwYWwsIHZhbHVlcyA9IG5hLm9taXQofmxvc3MpLCBncm91cCA9ICJjaXJjbGVzIiwgdGl0bGUgPSBwYXN0ZSgiQXBwbGVzIGhhaWwgZnJvc3Q8YnI+ZnJlZXplIDIwMDYiLCBzZXAgPSAiIiksIG5hLmxhYmVsID0gIiIsIHBvc2l0aW9uID0gInRvcHJpZ2h0IiwgbGFiRm9ybWF0ID0gbGFiZWxGb3JtYXQocHJlZml4ID0gIiQiKSkgJT4lCgoKYWRkTGFiZWxPbmx5TWFya2VycyhkYXRhID0gY291bnR5X2FwcGxlc19oYWlsZnJvc3RmcmVlemUyMDA2LCBsbmcgPSBsYXRfbG9uZ1ssMV0sIGxhdCA9IGxhdF9sb25nWywyXSwgbGFiZWwgPSBsYXBwbHkobGFicywgSFRNTCksIGxhYmVsT3B0aW9ucyA9IGxhYmVsT3B0aW9ucyhzdHlsZSA9IGxpc3QoImZvbnQtZmFtaWx5IiA9ICJzZXJpZiIpLCBub0hpZGUgPSBUUlVFLCBkaXJlY3Rpb24gPSAnbWlkZGxlJywgdGV4dE9ubHkgPSBUUlVFLCB0ZXh0c2l6ZSA9ICIxOHB4IiwgY29sID0gIndoaXRlIiwgIG9mZnNldCA9IGMoMjAsIDApLCBtYXJrZXJPcHRpb25zKHJpc2VPbkhvdmVyID0gVFJVRSkKKSkgCiAgICAgICAgCmFkZFNjYWxlQmFyKG1hcCwgcG9zaXRpb24gPSBjKCJ0b3ByaWdodCIpLCBvcHRpb25zID0gc2NhbGVCYXJPcHRpb25zKCkpCgpwYXIobWFyPWMoOC41LCA2LjEsIDYsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDUsIDEsIDApLCBsYXM9MCkKICBiYXJwbG90KEFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUyMDA2JGxvc3MsIG5hbWVzLmFyZyA9IEFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUyMDA2JE5BTUUsIHlheHQ9Im4iLCBsYXMgPSAyLCBjb2wgPSAibGlnaHRibHVlIiwgY2V4LmxhYiA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEpCnB0cyA8LSBwcmV0dHkoQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMDYkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KEFQUExFU19kYW1hZ2VfdG9wX2FnZ19oYWlsZnJvc3RmcmVlemUyMDA2JGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKdGl0bGUobWFpbj0iSVBOVyBhcHBsZXMgaW5zdXJhbmNlIGxvc3MgZHVlIHRvIGhhaWwsIGZyb3N0LCBhbmQgZnJlZXplXG4yMDA2IiwgbGluZSA9IDIsIGFkaiA9IDAsIGNleC5tYWluID0gMS45KQp0aXRsZSh4bGFiPSJDb3VudGllcyIsIGxpbmU9NywgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iQXBwbGVzIGluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCmdncGxvdChhcHBsZXNfaGFpbGZyb3N0ZnJlZXplX2NvdW50MjAwNiwgYWVzKGZpbGw9ZGFtYWdlY2F1c2UsIHk9Y291bnQsIHg9Y291bnR5KSkgKyAKICAgIGdlb21fYmFyKCBzdGF0PSJpZGVudGl0eSIpICsgdGhlbWVfYncoKSArIHRoZW1lKHBhbmVsLmdyaWQubWFqb3I9ZWxlbWVudF9ibGFuaygpLHBhbmVsLmdyaWQubWlub3I9ZWxlbWVudF9ibGFuaygpKSArIGdndGl0bGUoIjIwMDYgSVBOVyBhcHBsZXMgY291bnRzIHZzLiBjb3VudHk6IEhhaWwvRnJvc3QvRnJlZXplIikgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgyKSwgYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCBmYW1pbHkgPSAiU2VyaWYiKSwgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMiksIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9MjgsIGZhbWlseSA9ICJTZXJpZiIpKSAgKyB0aGVtZShsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNCkpICsgc2NhbGVfZmlsbF9tYW51YWwoImxlZ2VuZCIsIHZhbHVlcyA9IGMoIkhhaWwiID0gInJlZCIsICJGcm9zdCIgPSAiYmx1ZSIsICJGcmVlemUiID0gImdyYXkiKSkgKyB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTYsIGZhY2UgPSAiYm9sZCIpKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0yNCwgZmFtaWx5ID0gIlNlcmlmIiwgZmFjZSA9ICJib2xkIikpICsgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBzY2FsZV95X2Rpc2NyZXRlKGxpbWl0cz1jKDE6MTApKQoKCiMtMjAxNQoKCiBwYWwgPC0gY29sb3JOdW1lcmljKGNvbG9yUmFtcFBhbGV0dGUoYygibGlnaHRibHVlIiwgImJsdWUiKSkoMTEpLCBuYS5jb2xvciA9ICIjZmZmZmZmIiwKICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9IGV2YWwocGFyc2UodGV4dD1wYXN0ZSgiY291bnR5X2FwcGxlc19oYWlsZnJvc3RmcmVlemUyMDE1JCIsICJsb3NzIiwgc2VwPSIiKSkpKQoKbWFwIDwtIGxlYWZsZXQoZGF0YSA9IGNvdW50eV9hcHBsZXNfaGFpbGZyb3N0ZnJlZXplMjAxNSwgb3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21Db250cm9sID0gRkFMU0UsIHpvb21TbmFwID0gMC4xKSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JQogIAogIGFkZE1pbmlNYXAoCiAgICB0aWxlcyA9IHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaXRlLAogICAgcG9zaXRpb24gPSAndG9wbGVmdCcsIAogICAgd2lkdGggPSAyMDAsIGhlaWdodCA9IDIwMCwKICAgIHRvZ2dsZURpc3BsYXkgPSBGQUxTRSkgJT4lCiAgCiAgCiAgICNhZGRDb250cm9sKHRpdGxlLCBwb3NpdGlvbiA9ICJ0b3BsZWZ0IiwgY2xhc3NOYW1lPSJtYXAtdGl0bGUiKSAlPiUKICAKICAKICBmaXRCb3VuZHMoZXh0ZVsxXSwgZXh0ZVszXSwgZXh0ZVsyXSwgZXh0ZVs0XSkgJT4lIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5wYWwoY291bnR5X2FwcGxlc19oYWlsZnJvc3RmcmVlemUyMDE1JGxvc3MpLCAgZmlsbE9wYWNpdHkgPSAuOCwgd2VpZ2h0ID0gMSwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSBhZGRQb2x5Z29ucyhkYXRhID0gc3RhdGVzLCBmaWxsT3BhY2l0eSA9IDAsIHdlaWdodCA9IDQsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgCiAgCiAgICBhZGRMZWdlbmQocGFsID0gcGFsLCB2YWx1ZXMgPSBuYS5vbWl0KH5sb3NzKSwgZ3JvdXAgPSAiY2lyY2xlcyIsIHRpdGxlID0gcGFzdGUoIkFwcGxlcyBoYWlsIGZyb3N0PGJyPmZyZWV6ZSAyMDE1Iiwgc2VwID0gIiIpLCBuYS5sYWJlbCA9ICIiLCBwb3NpdGlvbiA9ICJ0b3ByaWdodCIsIGxhYkZvcm1hdCA9IGxhYmVsRm9ybWF0KHByZWZpeCA9ICIkIikpICU+JQoKCmFkZExhYmVsT25seU1hcmtlcnMoZGF0YSA9IGNvdW50eV9hcHBsZXNfaGFpbGZyb3N0ZnJlZXplMjAxNSwgbG5nID0gbGF0X2xvbmdbLDFdLCBsYXQgPSBsYXRfbG9uZ1ssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMsIEhUTUwpLCBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoc3R5bGUgPSBsaXN0KCJmb250LWZhbWlseSIgPSAic2VyaWYiKSwgbm9IaWRlID0gVFJVRSwgZGlyZWN0aW9uID0gJ21pZGRsZScsIHRleHRPbmx5ID0gVFJVRSwgdGV4dHNpemUgPSAiMThweCIsIGNvbCA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCikpIAogICAgICAgIAphZGRTY2FsZUJhcihtYXAsIHBvc2l0aW9uID0gYygidG9wcmlnaHQiKSwgb3B0aW9ucyA9IHNjYWxlQmFyT3B0aW9ucygpKQoKCnBhcihtYXI9Yyg4LjUsIDYuMSwgNiwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNSwgMSwgMCksIGxhcz0wKQogIGJhcnBsb3QoQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTUkbG9zcywgbmFtZXMuYXJnID0gQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTUkTkFNRSwgeWF4dD0ibiIsIGxhcyA9IDIsIGNvbCA9ICJsaWdodGJsdWUiLCBjZXgubGFiID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSkKcHRzIDwtIHByZXR0eShBUFBMRVNfZGFtYWdlX3RvcF9hZ2dfaGFpbGZyb3N0ZnJlZXplMjAxNSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoQVBQTEVTX2RhbWFnZV90b3BfYWdnX2hhaWxmcm9zdGZyZWV6ZTIwMTUkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQp0aXRsZShtYWluPSJJUE5XIGFwcGxlcyBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gaGFpbCwgZnJvc3QsIGFuZCBmcmVlemVcbjIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT03LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJBcHBsZXMgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKCiNtYXJrZXJPcHRpb25zKHJpc2VPbkhvdmVyID0gVFJVRSkKICMgYWRkTGVnZW5kKGNvbG9ycyA9IH5OQU1FLCBsYWJlbHMgPSB+TkFNRSwgdmFsdWVzID0gfk5BTUUsIG9wYWNpdHkgPSAwLjUsIHRpdGxlID0gTlVMTCwKICAjICAgICAgICAgIHBvc2l0aW9uID0gImJvdHRvbXJpZ2h0IikKCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQpsaWJyYXJ5KGh0bWxUYWJsZSkKCiNwaWUgY2hhcnQgZm9yIDIwMDctMjAxNQoKb3B0aW9ucyhzY2lwZW49OTk5KQoKYWRkTm9BbnN3ZXIgPC0gZnVuY3Rpb24oeCl7CiAgaWYoaXMuZmFjdG9yKHgpKSByZXR1cm4oZmFjdG9yKHgsIGxldmVscz1jKGxldmVscyh4KSwgIk5vIEFuc3dlciIpKSkKICByZXR1cm4oeCkKfQoKIy0tY291bnRzIHdoZWF0IGRyb3VnaHQKCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQgPC0gc3Vic2V0KHBhbG91c2VfY291bnRzLCBjb21tb2RpdHkgPT0gIkFQUExFUyIpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50IDwtIGFnZ3JlZ2F0ZShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGNvdW50LCBsaXN0KCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JG1vbnRoLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JHllYXIsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkZGFtYWdlY2F1c2UsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkY291bnR5LCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JHN0YXRlKSwgRlVOID0gInN1bSIpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X3llYXIgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkY291bnQsIGxpc3QocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCR5ZWFyLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGRhbWFnZWNhdXNlLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGNvdW50eSwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCRzdGF0ZSksIEZVTiA9ICJzdW0iKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyX25vY291bnR5IDwtIGFnZ3JlZ2F0ZShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGNvdW50LCBsaXN0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkeWVhciwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCRkYW1hZ2VjYXVzZSwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCRzdGF0ZSksIEZVTiA9ICJzdW0iKQoKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCkgPC0gYygibW9udGgiLCAieWVhciIsICJkYW1hZ2VjYXVzZSIsICJjb3VudHkiLCAic3RhdGUiLCAiY291bnQiKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X3llYXIpIDwtIGMoInllYXIiLCAiZGFtYWdlY2F1c2UiLCAiY291bnR5IiwgInN0YXRlIiwgImNvdW50IikKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyX25vY291bnR5KSA8LSBjKCJ5ZWFyIiwgImRhbWFnZWNhdXNlIiwgInN0YXRlIiwgImNvdW50IikKCiMtLWxvc3MKCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXRfbG9zcyA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzLCBjb21tb2RpdHkgPT0gIkFQUExFUyIpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3MgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXRfbG9zcyRsb3NzLCBsaXN0KCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3MkbW9udGgsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXRfbG9zcyR5ZWFyLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3MkZGFtYWdlY2F1c2UsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXRfbG9zcyRjb3VudHksIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXRfbG9zcyRzdGF0ZSksIEZVTiA9ICJzdW0iKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX3llYXIgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXRfbG9zcyRsb3NzLCBsaXN0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXRfbG9zcyR5ZWFyLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3MkZGFtYWdlY2F1c2UsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXRfbG9zcyRjb3VudHksIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXRfbG9zcyRzdGF0ZSksIEZVTiA9ICJzdW0iKQoKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzKSA8LSBjKCJtb250aCIsICJ5ZWFyIiwgImRhbWFnZWNhdXNlIiwgImNvdW50eSIsICJzdGF0ZSIsICJsb3NzIikKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX3llYXIpIDwtIGMoInllYXIiLCAiZGFtYWdlY2F1c2UiLCAiY291bnR5IiwgInN0YXRlIiwgImxvc3MiKQoKCgoKCgojcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF9jb3VudHkgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkbG9zcywgbGlzdCggcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCRkYW1hZ2VjYXVzZSwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCR5ZWFyLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGNvdW50eSApLCBGVU4gPSAibGVuZ3RoIikKCiNjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50KSA8LSBjKCJkYW1hZ2VjYXVzZSIsICJ5ZWFyIiwgImxvc3MiKQoKI2NvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfY291bnR5KSA8LSBjKCJkYW1hZ2VjYXVzZSIsICJ5ZWFyIiwgImNvdW50eSIsICJsb3NzIikKCgojLWJveHBsb3RzIG9mIGNvdW50IGRhdGEgZm9yIGFsbCBjb21tb2RpdGllcyBhbmQgYWxsIGRhbWFnZSBjYXVzZXMtIDE5ODktMjAxNQoKI3BhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfY29tbW9kaXR5IDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50LCBsb3NzID4gMjApCiNwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X2NvbW1vZGl0eSA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF9jb21tb2RpdHksIGNvbW1vZGl0eSAhPSAiQURKVVNURUQgR1JPU1MgUkVWRU5VRSIpCiNwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGRhbWFnZWNhdXNlIDwtIGZhY3RvcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50JGRhbWFnZWNhdXNlKQoKI3BhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfY29tbW9kaXR5JGNvbW1vZGl0eSA8LSBmYWN0b3IocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF9jb21tb2RpdHkkY29tbW9kaXR5KQoKCiNwYXIobWFyPWMoOC44LCA2LjEsIDIuMSwgMi4xKSwgbWdwPWMoMywgMSwgMCksIGxhcz0wKQoKCgpwc2NfZHJvdWdodCA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyLCBkYW1hZ2VjYXVzZSA9PSAiSGFpbCIgfCBkYW1hZ2VjYXVzZSA9PSAiRnJvc3QiIHwgZGFtYWdlY2F1c2UgPT0gIkZyZWV6ZSIpCgojLS1jcmVhdGUgbWlzc2luZyBjb3VudHkgeWVhciBkYXRhIHdoZXJlIG5vIHZhbHVlcyBhcmUgZm91bmQKZDEgPC0gZGF0YS5mcmFtZSh1bmlxdWUocGFsb3VzZV9jb3VudHMkY291bnR5KSkKY29sbmFtZXMoZDEpIDwtICJjb3VudHkiCgpkMiA8LSBkYXRhLmZyYW1lKHVuaXF1ZShwYWxvdXNlX2NvdW50cyR5ZWFyKSkKY29sbmFtZXMoZDIpIDwtICJ5ZWFyIgpkMiA8LSBkMltvcmRlcihkMiR5ZWFyKSxdCmQyIDwtIGRhdGEuZnJhbWUoZDIpCmNvbG5hbWVzKGQyKSA8LSAieWVhciIKCmQyYSA8LSBjKCJXQSIsICJXQSIsICJXQSIsICJXQSIsICJXQSIsICJXQSIsICJPUiIsICJPUiIsICJXQSIsICJJRCIsICJJRCIsICJJRCIsICJJRCIsICJJRCIsICJJRCIsICJXQSIsICJPUiIsICJPUiIsICJPUiIsICJPUiIsICJPUiIsICJPUiIsICJXQSIsICJXQSIsICJJRCIsICJXQSIpCgpkMmEgPC0gZGF0YS5mcmFtZShkMmEpCmNvbG5hbWVzKGQyYSkgPC0gInN0YXRlIgoKZDEgPC0gZGF0YS5mcmFtZShkMVtyZXAoc2VxX2xlbihucm93KGQxKSksIGVhY2g9MjcpLF0pCmQyIDwtIGRvLmNhbGwoInJiaW5kIiwgcmVwbGljYXRlKDI2LCBkMiwgc2ltcGxpZnkgPSBGQUxTRSkpCmQyYSA8LSBkYXRhLmZyYW1lKGQyYVtyZXAoc2VxX2xlbihucm93KGQyYSkpLCBlYWNoPTI3KSxdKQoKZDMgPC0gY2JpbmQoZDEsIGQyYSwgZDIpCmNvbG5hbWVzKGQzKSA8LSBjKCJjb3VudHkiLCAic3RhdGUiLCAieWVhciIpCgpwc2NfZHJvdWdodDIgPC0gbWVyZ2UoZDMsIHBzY19kcm91Z2h0LCBieSA9IGMoInllYXIiLCAiY291bnR5IiksIGFsbCA9IFRSVUUpCnBzY19kcm91Z2h0MiRjb3VudFtpcy5uYShwc2NfZHJvdWdodDIkY291bnQpXSA8LSAwCgpwc2NfZHJvdWdodDIgPC0gc3Vic2V0KHBzY19kcm91Z2h0MiwgeWVhciA+PSAyMDAxKQoKcHNjX2Ryb3VnaHQyJGNvdW50eXN0YXRlIDwtIHBhc3RlKHBzY19kcm91Z2h0MiRjb3VudHksIHBzY19kcm91Z2h0MiRzdGF0ZS54LCBzZXA9IiwgIikKCiNmaWd1cmUgb3V0IHdoaWNoIGNvdW50aWVzIGhhdmUgYWxsIHplcm9zIGFuZCBlbGltaW5hdGUKcHNjX2Ryb3VnaHQyYSA8LSBhZ2dyZWdhdGUocHNjX2Ryb3VnaHQyJGNvdW50LCBieSA9IGxpc3QocHNjX2Ryb3VnaHQyJGNvdW50eXN0YXRlKSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKHBzY19kcm91Z2h0MmEpIDwtIGMoImNvdW50eXN0YXRlIiwgImNvdW50IikKCnBzYyA8LSBzdWJzZXQocHNjX2Ryb3VnaHQyYSwgY291bnQgIT0gMCkKCgpwc2MzIDwtIHN1YnNldChwc2NfZHJvdWdodDIsIGNvdW50eXN0YXRlICVpbiUgcHNjJGNvdW50eXN0YXRlICkKCgoKcGFyKG1hcj1jKDUsNiw0LDIpKzAuMSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNSwxLDApKQppbnRlcmFjdGlvbi5wbG90KHguZmFjdG9yICAgICA9IHBzYzMkeWVhciwKICAgICAgICAgICAgICAgICB0cmFjZS5mYWN0b3IgPSBwc2MzJGNvdW50eXN0YXRlLCAKICAgICAgICAgICAgICAgICByZXNwb25zZSAgICAgPSBwc2MzJGNvdW50LCAKICAgICAgICAgICAgICAgICBmdW4gPSBzdW0sCiAgICAgICAgICAgICAgICAgbGFzID0gMiwKICAgICAgICAgICAgICAgICB0eXBlPSJsIiwKICAgICAgICAgICAgICAgICBjb2w9YygiYmxhY2siLCJyZWQxIiwiZ3JlZW4xIiwgImJsdWUxIiwgInllbGxvdzEiLCAicmVkMiIsImdyZWVuMiIsICJibHVlMiIsICJ5ZWxsb3cyIiwicmVkMyIsImdyZWVuMyIsICJibHVlMyIsICJ5ZWxsb3czIiwicmVkNCIsImdyZWVuNCIsICJibHVlNCIsICJ5ZWxsb3c0IiksICAjIyMgQ29sb3JzIGZvciBsZXZlbHMgb2YgdHJhY2UgdmFyLgogICAgICAgICAgICAgICAgICNwY2g9YygxOSwgMTcsIDE1KSwgICAgICAgICAgICAgIyMjIFN5bWJvbHMgZm9yIGxldmVscyBvZiB0cmFjZSB2YXIuCiAgICAgICAgICAgICAgICAgZml4ZWQ9RkFMU0UsICAgICAgICAgICAgICAgICAgICAjIyMgT3JkZXIgYnkgZmFjdG9yIG9yZGVyIGluIGRhdGEKICAgICAgICAgICAgICAgICBsZWcuYnR5ID0gIm4iLAogICAgICAgICAgICAgICAgIHlsYWI9IiIsCiAgICAgICAgICAgICAgICAgbGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgeGxhYj0iIikKICAgICAgICAgICAgICAgICAjbWFpbj0iQW5udWFsIEFwcGxlcyBJbnN1cmFuY2UgQ2xhaW0gRnJlcXVlbmN5IFxuIGJ5IGNvdW50eSBmb3IgdGhlIElQTlcgU3R1ZHkgQXJlYSwgMTk4OS0yMDE1OiBIQUlML0ZST1NUL0ZSRUVaRSIsIGxhcyA9IDIpCgp0aXRsZShtYWluPSJBbm51YWwgSVBOVyBBcHBsZXMgSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSBieSBjb3VudHlcbjIwMDEtMjAxNTogSEFJTC9GUk9TVC9GUkVFWkUiLCBhZGogPSAwLCBjZXgubWFpbiA9IDEuOSkKdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IkFwcGxlcyBDbGFpbSBGcmVxdWVuY3k6IEhhaWwvRnJvc3QvRnJlZXplIiwgbGluZT0zLjUsIGNleC5sYWIgPSAxLjQpCgoKcHNjX2Ryb3VnaHQgPC0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyCgojLS1jcmVhdGUgbWlzc2luZyBjb3VudHkgeWVhciBkYXRhIHdoZXJlIG5vIHZhbHVlcyBhcmUgZm91bmQKZDEgPC0gZGF0YS5mcmFtZSh1bmlxdWUocGFsb3VzZV9jb3VudHMkY291bnR5KSkKY29sbmFtZXMoZDEpIDwtICJjb3VudHkiCgpkMiA8LSBkYXRhLmZyYW1lKHVuaXF1ZShwYWxvdXNlX2NvdW50cyR5ZWFyKSkKY29sbmFtZXMoZDIpIDwtICJ5ZWFyIgpkMiA8LSBkMltvcmRlcihkMiR5ZWFyKSxdCmQyIDwtIGRhdGEuZnJhbWUoZDIpCmNvbG5hbWVzKGQyKSA8LSAieWVhciIKCmQyYSA8LSBjKCJXQSIsICJXQSIsICJXQSIsICJXQSIsICJXQSIsICJXQSIsICJPUiIsICJPUiIsICJXQSIsICJJRCIsICJJRCIsICJJRCIsICJJRCIsICJJRCIsICJJRCIsICJXQSIsICJPUiIsICJPUiIsICJPUiIsICJPUiIsICJPUiIsICJPUiIsICJXQSIsICJXQSIsICJJRCIsICJXQSIpCgpkMmEgPC0gZGF0YS5mcmFtZShkMmEpCmNvbG5hbWVzKGQyYSkgPC0gInN0YXRlIgoKZDEgPC0gZGF0YS5mcmFtZShkMVtyZXAoc2VxX2xlbihucm93KGQxKSksIGVhY2g9MjcpLF0pCmQyIDwtIGRvLmNhbGwoInJiaW5kIiwgcmVwbGljYXRlKDI2LCBkMiwgc2ltcGxpZnkgPSBGQUxTRSkpCmQyYSA8LSBkYXRhLmZyYW1lKGQyYVtyZXAoc2VxX2xlbihucm93KGQyYSkpLCBlYWNoPTI3KSxdKQoKZDMgPC0gY2JpbmQoZDEsIGQyYSwgZDIpCmNvbG5hbWVzKGQzKSA8LSBjKCJjb3VudHkiLCAic3RhdGUiLCAieWVhciIpCgpwc2NfZHJvdWdodDIgPC0gbWVyZ2UoZDMsIHBzY19kcm91Z2h0LCBieSA9IGMoInllYXIiLCAiY291bnR5IiksIGFsbCA9IFRSVUUpCnBzY19kcm91Z2h0MiRjb3VudFtpcy5uYShwc2NfZHJvdWdodDIkY291bnQpXSA8LSAwCgpwc2NfZHJvdWdodDIgPC0gc3Vic2V0KHBzY19kcm91Z2h0MiwgeWVhciA+PSAyMDAxKQoKcHNjX2Ryb3VnaHQyJGNvdW50eXN0YXRlIDwtIHBhc3RlKHBzY19kcm91Z2h0MiRjb3VudHksIHBzY19kcm91Z2h0MiRzdGF0ZS54LCBzZXA9IiwgIikKCiNmaWd1cmUgb3V0IHdoaWNoIGNvdW50aWVzIGhhdmUgYWxsIHplcm9zIGFuZCBlbGltaW5hdGUKcHNjX2Ryb3VnaHQyYSA8LSBhZ2dyZWdhdGUocHNjX2Ryb3VnaHQyJGNvdW50LCBieSA9IGxpc3QocHNjX2Ryb3VnaHQyJGNvdW50eXN0YXRlKSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKHBzY19kcm91Z2h0MmEpIDwtIGMoImNvdW50eXN0YXRlIiwgImNvdW50IikKCnBzYyA8LSBzdWJzZXQocHNjX2Ryb3VnaHQyYSwgY291bnQgIT0gMCkKCgpwc2MzIDwtIHN1YnNldChwc2NfZHJvdWdodDIsIGNvdW50eXN0YXRlICVpbiUgcHNjJGNvdW50eXN0YXRlICkKCgojcGFyKG1hcj1jKDUsNiw0LDIpKzAuMSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNSwxLDApKQppbnRlcmFjdGlvbi5wbG90KHguZmFjdG9yICAgICA9IHBzYzMkeWVhciwKICAgICAgICAgICAgICAgICB0cmFjZS5mYWN0b3IgPSBwc2MzJGNvdW50eXN0YXRlLCAKICAgICAgICAgICAgICAgICByZXNwb25zZSAgICAgPSBwc2MzJGNvdW50LCAKICAgICAgICAgICAgICAgICBmdW4gPSBzdW0sCiAgICAgICAgICAgICAgICAgbGFzID0gMiwKICAgICAgICAgICAgICAgICB0eXBlPSJsIiwKICAgICAgICAgICAgICAgICBjb2w9YygiYmxhY2siLCJyZWQxIiwiZ3JlZW4xIiwgImJsdWUxIiwgInllbGxvdzEiLCAicmVkMiIsImdyZWVuMiIsICJibHVlMiIsICJ5ZWxsb3cyIiwicmVkMyIsImdyZWVuMyIsICJibHVlMyIsICJ5ZWxsb3czIiwicmVkNCIsImdyZWVuNCIsICJibHVlNCIsICJ5ZWxsb3c0IiksICAjIyMgQ29sb3JzIGZvciBsZXZlbHMgb2YgdHJhY2UgdmFyLgogICAgICAgICAgICAgICAgICNwY2g9YygxOSwgMTcsIDE1KSwgICAgICAgICAgICAgIyMjIFN5bWJvbHMgZm9yIGxldmVscyBvZiB0cmFjZSB2YXIuCiAgICAgICAgICAgICAgICAgZml4ZWQ9RkFMU0UsICAgICAgICAgICAgICAgICAgICAjIyMgT3JkZXIgYnkgZmFjdG9yIG9yZGVyIGluIGRhdGEKICAgICAgICAgICAgICAgICBsZWcuYnR5ID0gIm4iLAogICAgICAgICAgICAgICAgIHlsYWI9IiIsCiAgICAgICAgICAgICAgICAgbGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgeGxhYj0iIikKICAgICAgICAgICAgICAgICAjbWFpbj0iQW5udWFsIEFwcGxlcyBJbnN1cmFuY2UgQ2xhaW0gRnJlcXVlbmN5IFxuIGJ5IGNvdW50eSBmb3IgdGhlIElQTlcgU3R1ZHkgQXJlYSwgMTk4OS0yMDE1OiBBTEwgREFNQUdFIENBVVNFUyIsIGxhcyA9IDIpCgp0aXRsZShtYWluPSJBbm51YWwgSVBOVyBBcHBsZXMgSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSBieSBjb3VudHlcbjIwMDEtMjAxNTogQWxsIERhbWFnZSBDYXVzZXMiLCBhZGogPSAwLCBjZXgubWFpbiA9IDEuOSkKdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IkFwcGxlcyBDbGFpbSBGcmVxdWVuY3k6IEFsbCBEYW1hZ2UgQ2F1c2VzIiwgbGluZT0zLjUsIGNleC5sYWIgPSAxLjQpCgojYm94cGxvdChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfeWVhciRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX3llYXIkeWVhciwgeWxhYiA9ICJJbnN1cmFuY2UgQ2xhaW0gRnJlcXVlbmN5IiwgeGxhYiA9ICIiLCBuYW1lcy5hcmcgPSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfeWVhciR5ZWFyLCBsYXMgPSAzLCBtYWluID0gIklQTlcgV2hlYXQgSW5zdXJhbmNlIExvc3MgRnJlcXVlbmNpZXMvWWVhciAxOTg5LTIwMTUiKQoKI3RpdGxlKHhsYWI9IlllYXIiLCBsaW5lPTcpCgoKI2JveHBsb3QocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyX25vY291bnR5JGNvdW50IH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyX25vY291bnR5JHllYXIsIHlsYWIgPSAiSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSIsIHhsYWIgPSAiIiwgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyX25vY291bnR5JHllYXIsIGxhcyA9IDMsIG1haW4gPSAiSVBOVyBXaGVhdCBJbnN1cmFuY2UgTG9zcyBGcmVxdWVuY2llcy9ZZWFyIDE5ODktMjAxNSIpCgojdGl0bGUoeGxhYj0iRGFtYWdlIENhdXNlIiwgbGluZT03KQoKCiNwbG90KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkbG9zcyB+IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkZGFtYWdlY2F1c2UsIHlsYWIgPSAiSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSIsIHhsYWIgPSAiIiwgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRkYW1hZ2VjYXVzZSwgbGFzID0gMywgbWFpbiA9ICJJUE5XIFdoZWF0IEluc3VyYW5jZSBMb3NzIEZyZXF1ZW5jaWVzL1llYXIgMTk4OS0yMDE1IikKCiN0aXRsZSh4bGFiPSJEYW1hZ2UgQ2F1c2UiLCBsaW5lPTcpCgoKI3BzY19kcm91Z2h0IDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X2NvdW50eSwgZGFtYWdlY2F1c2UgPT0gIkRyb3VnaHQiKQoKCiNiYXJwbG90KHBzY19kcm91Z2h0JGxvc3MsIHlsYWIgPSAiSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSIsIHhsYWIgPSAiIiwgbmFtZXMuYXJnID0gcHNjX2Ryb3VnaHQkeWVhciwgbGFzID0gMywgbWFpbiA9ICJJUE5XIFdoZWF0IEluc3VyYW5jZSBMb3NzIEZyZXF1ZW5jaWVzL1llYXIgMTk4OS0yMDE1IikKCiN0aXRsZSh4bGFiPSJEYW1hZ2UgQ2F1c2UiLCBsaW5lPTcpCgojbW9kZWxfY291bnQgPC0gZ2xtKGZvcm11bGEgPSBsb2cobG9zcykgfiBkYW1hZ2VjYXVzZSArIGNvbW1vZGl0eSwgZmFtaWx5ID0gInBvaXNzb24iLCBkYXRhID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCkKCgoKYGBgCgohW10oaHR0cHM6Ly9kbWluZS5pby93YWYvaW1nL1N0ZXAxLnBuZykKCjxicj48L2JyPgo8ZGl2IGFsaWduPSJsZWZ0Ij4KCiMjIFNURVAgOTogQkFSTEVZLCAyMDAxLTIwMTUgZm9yIHRoZSBJUE5XCgo8YnI+PC9icj4KPGRpdiBhbGlnbj0iY2VudGVyIj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPVRSVUUsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gN30KCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGdyaWRFeHRyYSkKCiNwaWUgY2hhcnQgZm9yIDIwMDctMjAxNQoKb3B0aW9ucyhzY2lwZW49OTk5KQoKYWRkTm9BbnN3ZXIgPC0gZnVuY3Rpb24oeCl7CiAgaWYoaXMuZmFjdG9yKHgpKSByZXR1cm4oZmFjdG9yKHgsIGxldmVscz1jKGxldmVscyh4KSwgIk5vIEFuc3dlciIpKSkKICByZXR1cm4oeCkKfQoKQkFSTEVZIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlLCBjb21tb2RpdHkgPT0gIkJBUkxFWSIpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1IDwtIGFnZ3JlZ2F0ZShCQVJMRVkkbG9zcywgbGlzdChCQVJMRVkkZGFtYWdlY2F1c2UpLCBGVU4gPSAic3VtIikKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNSkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpCgpwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZSA8LSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1W29yZGVyKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUkbG9zcyksXSAKWCA8LSBwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZVtvcmRlcihwYWxvdXNlX3N1bWxvc3NfMjAwN18yMDE1X2FnZ3JlZ2F0ZSRsb3NzKSxdIAojY29sbmFtZXMoWCkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpCnN1bW1hcnlfZGF0YXNldCA8LSBYICU+JSBmaWx0ZXIobG9zcyA8IDM5MDAwMCkgCnN1bW1hcnlfZGF0YXNldDIgPC0gWCAlPiUgZmlsdGVyKGxvc3MgPiAzOTAwMDApIApjb2xuYW1lcyhzdW1tYXJ5X2RhdGFzZXQpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQpZIDwtIHN1bShzdW1tYXJ5X2RhdGFzZXQkbG9zcykKWVkgPC0gYygiT3RoZXIiLCBZKQpZWSA8LSBkYXRhLmZyYW1lKHQoWVkpKQpjb2xuYW1lcyhZWSkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpCllZWSA8LSByYmluZChzdW1tYXJ5X2RhdGFzZXQyLCBZWSkKI2ZhY3RvcihZWVkpCgpZWVkgPC0gYXMuZGF0YS5mcmFtZShsYXBwbHkoWVlZLCBhZGROb0Fuc3dlcikpCllZWSRsb3NzIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKFlZWSRsb3NzKSkKWVlZMTwtIFlZWVtvcmRlcihZWVkkbG9zcyksXSAKWVlZMSA8LSBZWVkxWyBucm93KFlZWTEpOjEsIF0KCnAgPC0gcGxvdF9seShZWVksIGxhYmVscyA9IH5kYW1hZ2VjYXVzZSwgdmFsdWVzID0gfmxvc3MsIHR5cGUgPSAncGllJywKICAgICAgICAgICAgIHRleHRwb3NpdGlvbiA9ICdpbnNpZGUnLAogICAgICAgICAgICAgdGV4dGluZm8gPSAnbGFiZWwrcGVyY2VudCcsCiAgICAgICAgICAgICBpbnNpZGV0ZXh0Zm9udCA9IGxpc3QoY29sb3IgPSAnI0ZGRkZGRicpLAogICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLAogICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnJCcsIGxvc3MsICcgbWlsbGlvbicpLAogICAgICAgICAgICAgbWFya2VyID0gbGlzdChjb2xvcnMgPSBjb2xvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJyNGRkZGRkYnLCB3aWR0aCA9IDEpKSwKICAgICAgICAgICAgICNUaGUgJ3B1bGwnIGF0dHJpYnV0ZSBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBzcGFjZSBiZXR3ZWVuIHRoZSBzZWN0b3JzCiAgICAgICAgICAgICBzaG93bGVnZW5kID0gVFJVRSkgJT4lCiAgbGF5b3V0KHRpdGxlID0gJ1RvcCBEYW1hZ2UgQ2F1c2VzIGZvciBCQVJMRVksIFBhbG91c2UgUmVnaW9uOiAxOTg5LTIwMTUnLAogICAgICAgICB4YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwgemVyb2xpbmUgPSBGQUxTRSwgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSksCiAgICAgICAgIHlheGlzID0gbGlzdChzaG93Z3JpZCA9IEZBTFNFLCB6ZXJvbGluZSA9IEZBTFNFLCBzaG93dGlja2xhYmVscyA9IEZBTFNFKSkKCiAgICAgICAgICAgCiNwCgpZWVkyIDwtIFlZWTEKWVlZMiRsb3NzIDwtIHJvdW5kKFlZWTIkbG9zcywgZGlnaXRzID0gMCkKWVlZMiRsb3NzIDwtIGZvcm1hdChZWVkyJGxvc3MsYmlnLm1hcms9IiwiLHNjaWVudGlmaWM9RkFMU0UpCllZWTIkbG9zcyA8LSBwYXN0ZSgiJCIsIFlZWTIkbG9zcywgc2VwPSIiKQpZWVkyJGxvc3MgPC0gZ3N1YigiICIsICIiLCBZWVkyJGxvc3MsIGZpeGVkID0gVFJVRSkKCgojLS15ZWFyCnBhbG91c2Vfc3VtbG9zc195ZWFyIDwtIGFnZ3JlZ2F0ZShCQVJMRVkkbG9zcywgbGlzdChCQVJMRVkkeWVhciksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfeWVhcikgPC0gYygieWVhciIsICJsb3NzIikKCiMtLWNvdW50eQoKcGFsb3VzZV9zdW1sb3NzX2NvdW50eSA8LSBhZ2dyZWdhdGUoQkFSTEVZJGxvc3MsIGxpc3QoQkFSTEVZJGNvdW50eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfY291bnR5KSA8LSBjKCJjb3VudHkiLCAibG9zcyIpCgpwYXIobWFyPWMoMTIuNSwgNi4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCmJhcnBsb3QocGFsb3VzZV9zdW1sb3NzX2NvdW50eSRsb3NzLCBuYW1lcy5hcmcgPSBwYWxvdXNlX3N1bWxvc3NfY291bnR5JGNvdW50eSwgY2V4Lm5hbWVzID0gMS40LCBsYXMgPSAzLCB5YXh0PSJuIiwgIGNvbCA9ICJsaWdodGJsdWUiKQpwdHMgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19jb3VudHkkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19jb3VudHkkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKI210ZXh0KHRleHQgPSAiRGFtYWdlIENhdXNlIiwKIyAgICAgIHNpZGUgPSAxLCNzaWRlIDEgPSBib3R0b20KIyAgICAgIGxpbmUgPSA4KQoKdGl0bGUobWFpbj0iSVBOVyBCYXJsZXkgaW5zdXJhbmNlIGxvc3MgYnkgY29tbW9kaXR5OiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT04LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJJbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCgpwYXIobWFyPWMoMTIuNSwgNi4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCmJhcnBsb3QocGFsb3VzZV9zdW1sb3NzX3llYXIkbG9zcywgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzX3llYXIkeWVhciwgY2V4Lm5hbWVzID0gMS40LCBsYXMgPSAzLCB5YXh0PSJuIiwgIGNvbCA9ICJsaWdodGJsdWUiKQpwdHMgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc195ZWFyJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfeWVhciRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCgojbXRleHQodGV4dCA9ICJZZWFycyIsCiMgICAgICBzaWRlID0gMSwjc2lkZSAxID0gYm90dG9tCiMgICAgICBsaW5lID0gOCkKCnRpdGxlKG1haW49IklQTlcgQmFybGV5IGluc3VyYW5jZSBsb3NzIGJ5IHllYXI6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTgsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9Ikluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCnBhcihtYXI9YygxMiwgNi4xLCA2LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCgpsZXZlbHMoWVlZMSRkYW1hZ2VjYXVzZSlbOF0gPC0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIKYmFycGxvdChZWVkxJGxvc3MsIG5hbWVzLmFyZyA9IFlZWTEkZGFtYWdlY2F1c2UsIHlheHQgPSAnbicsIGNvbCA9ICJsaWdodGJsdWUiLCBsYXMgPSAzLCBjZXgubWFpbiA9IDEuNSwgY2V4LmxhYiA9IDEuNCwgY2V4LmF4aXMgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxLCBvdXRsaW5lID0gRkFMU0UpCgpwdHMgPC0gcHJldHR5KFlZWSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoWVlZJGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCnRpdGxlKG1haW49IklQTlcgYmFybGV5IGluc3VyYW5jZSBsb3NzIGJ5IGRhbWFnZSBjYXVzZVxuMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJZZWFycyIsIGxpbmU9OCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iQmFybGV5IGluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCgoKCiNtdGV4dCh0ZXh0ID0gIkRhbWFnZSBDYXVzZSIsCiMgICAgICBzaWRlID0gMSwjc2lkZSAxID0gYm90dG9tCiMgICAgICBsaW5lID0gOS41KQoKaHRtbFRhYmxlKFlZWTIsCiAgICAgICAgICBjZ3JvdXAgPSBjKCIyMDAxLTIwMTUiKSwKICAgICAgICAgIGNhcHRpb24gPSAiSVBOVyByZWdpb24gQkFSTEVZIHRvdGFsIGluc3VyYW5jZSBsb3NzIGJ5IGRhbWFnZSBjYXVzZSwgMjAwMS0yMDE1IiwKICAgICAgICAgIGFsaWduID0gImMiLAogICAgICAgICAgcm5hbWVzID0gRkFMU0UsCiAgICAgICAgICBjc3MuY2VsbCA9ICJwYWRkaW5nLWxlZnQ6IC41ZW07IHBhZGRpbmctcmlnaHQ6IC41ZW07IikKCmBgYAoKCjxkaXYgYWxpZ249ImNlbnRlciI+CgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1UUlVFLCBlY2hvPUZBTFNFLCBmaWcud2lkdGggPSAxMCwgZmlnLmhlaWdodCA9IDd9CgpsaWJyYXJ5KFJDb2xvckJyZXdlcikKCnN0YXRlcyA8LSByZWFkU2hhcGVQb2x5KCcvZG1pbmUvZGF0YS9zdGF0ZXMvc3RhdGVzLnNocCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvajRzdHJpbmc9Q1JTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpKQogICAgICAgIHByb2plY3Rpb24gPSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0ICtlbGxwcz1XR1M4NCArdG93Z3M4ND0wLDAsMCIpCgoKIy0taW50ZXJhY3Rpb24gcGxvdCBsb3NzIHZzIHllYXIgZm9yIGFsbCBkYW1hZ2UgY2F1c2VzLCBhbGwgUGFsb3VzZSBjb3VudGllcwpCQVJMRVkgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUsIGNvbW1vZGl0eSA9PSAiQkFSTEVZIikKCmxldmVscyhCQVJMRVkkZGFtYWdlY2F1c2UpWzhdIDwtICJFeGNlc3NpdmUgTW9pc3R1cmUiCkJBUkxFWSRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IoQkFSTEVZJGRhbWFnZWNhdXNlKQoKQkFSTEVZX2RhbWFnZSA8LSBzdWJzZXQoQkFSTEVZLCBkYW1hZ2VjYXVzZSA9PSAiRHJvdWdodCIgfCBkYW1hZ2VjYXVzZSA9PSAiSGVhdCIgfCBkYW1hZ2VjYXVzZSA9PSAiRXhjZXNzaXZlIE1vaXN0dXJlIiB8IGRhbWFnZWNhdXNlID09ICJIYWlsIiB8IGRhbWFnZWNhdXNlID09ICJGcm9zdCIgfCBkYW1hZ2VjYXVzZSA9PSAiRGVjbGluZSBpbiBQcmljZSIgfCBkYW1hZ2VjYXVzZSA9PSAiQ29sZCBXZXQgV2VhdGhlciIpCgpCQVJMRVlfZGFtYWdlJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihCQVJMRVlfZGFtYWdlJGRhbWFnZWNhdXNlKQojYWdncmVnYXRlKFdIRUFUX2RhbWFnZSRsb3NzLCBsaXN0KFdIRUFUX2RhbWFnZSRkYW1hZ2VjYXVzZSksIEZVTiA9ICJzdW0iKQoKbGlicmFyeShzY2FsZXMpCgpCQVJMRVlfZGFtYWdlX3RvcCA8LSBzdWJzZXQoQkFSTEVZX2RhbWFnZSwgZGFtYWdlY2F1c2UgPT0gIkhlYXQiIHwgZGFtYWdlY2F1c2UgPT0gIkRyb3VnaHQiIHwgZGFtYWdlY2F1c2UgPT0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIpCkJBUkxFWV9kYW1hZ2VfdG9wJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihCQVJMRVlfZGFtYWdlX3RvcCRkYW1hZ2VjYXVzZSwgbGV2ZWxzID0gYygiRXhjZXNzaXZlIE1vaXN0dXJlIiwgIkhlYXQiLCAiRHJvdWdodCIpKQoKIzIwMTEgRXhjZXNzaXZlIE1vaXN0dXJlCgpCQVJMRVlfZGFtYWdlX2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSA8LSBzdWJzZXQoQkFSTEVZX2RhbWFnZSwgZGFtYWdlY2F1c2UgPT0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIpCkJBUkxFWV9kYW1hZ2VfZXhjZXNzaXZlbW9pc3R1cmUyMDExIDwtIHN1YnNldChCQVJMRVlfZGFtYWdlX2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSwgeWVhciA9PSAyMDExKQoKCkJBUkxFWV9kYW1hZ2VfdG9wX2FnZ19leGNlc3NpdmVtb2lzdHVyZTIwMTEgPC0gYWdncmVnYXRlKEJBUkxFWV9kYW1hZ2VfZXhjZXNzaXZlbW9pc3R1cmUyMDExJGxvc3MsIGJ5ID0gbGlzdChCQVJMRVlfZGFtYWdlX2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSRjb3VudHkpLCBGVU4gPSAic3VtIikKY29sbmFtZXMoQkFSTEVZX2RhbWFnZV90b3BfYWdnX2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSkgPC0gYygiTkFNRSIsICJsb3NzIikKCmNvdW50eV9iYXJsZXlfZXhjZXNzaXZlbW9pc3R1cmUyMDExIDwtIG1lcmdlKGNvdW50aWVzLCBCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZXhjZXNzaXZlbW9pc3R1cmUyMDExLCBieSA9ICJOQU1FIikKCgojMjAxNQoKQkFSTEVZX2RhbWFnZV9kcm91Z2h0aGVhdDIwMTUgPC0gc3Vic2V0KEJBUkxFWV9kYW1hZ2UsIGRhbWFnZWNhdXNlID09ICJIZWF0IiB8IGRhbWFnZWNhdXNlID09ICJEcm91Z2h0IikKQkFSTEVZX2RhbWFnZV9kcm91Z2h0aGVhdDIwMTUgPC0gc3Vic2V0KEJBUkxFWV9kYW1hZ2VfZHJvdWdodGhlYXQyMDE1LCB5ZWFyID09IDIwMTUpCgoKQkFSTEVZX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0MjAxNSA8LSBhZ2dyZWdhdGUoQkFSTEVZX2RhbWFnZV9kcm91Z2h0aGVhdDIwMTUkbG9zcywgYnkgPSBsaXN0KEJBUkxFWV9kYW1hZ2VfZHJvdWdodGhlYXQyMDE1JGNvdW50eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDE1KSA8LSBjKCJOQU1FIiwgImxvc3MiKQoKY291bnR5X2JhcmxleV9kcm91Z2h0aGVhdDIwMTUgPC0gbWVyZ2UoY291bnRpZXMsIEJBUkxFWV9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTUsIGJ5ID0gIk5BTUUiKQoKCiNhbGwgeWVhcnMgMjAwMSAtIDIwMTUKCkJBUkxFWV9kYW1hZ2VfZHJvdWdodGhlYXQgPC0gc3Vic2V0KEJBUkxFWV9kYW1hZ2UsIGRhbWFnZWNhdXNlID09ICJIZWF0IiB8IGRhbWFnZWNhdXNlID09ICJEcm91Z2h0IikKCkJBUkxFWV9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdCA8LSBhZ2dyZWdhdGUoQkFSTEVZX2RhbWFnZV9kcm91Z2h0aGVhdCRsb3NzLCBieSA9IGxpc3QoQkFSTEVZX2RhbWFnZV9kcm91Z2h0aGVhdCRjb3VudHkpLCBGVU4gPSAic3VtIikKY29sbmFtZXMoQkFSTEVZX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0KSA8LSBjKCJOQU1FIiwgImxvc3MiKQoKY291bnR5X2JhcmxleV9kcm91Z2h0aGVhdCA8LSBtZXJnZShjb3VudGllcywgQkFSTEVZX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0LCBieSA9ICJOQU1FIikKCiNnZ3Bsb3QoQkFSTEVZX2RhbWFnZV90b3AsIGFlcyhmaWxsPWRhbWFnZWNhdXNlLCB5PWxvc3MsIHg9eWVhcikpICsgCiMgICAgZ2VvbV9iYXIoIHN0YXQ9ImlkZW50aXR5IikgKyB0aGVtZV9idygpICsgZ2d0aXRsZSgiSVBOVyBiYXJsZXkgbG9zcyB2cy4geWVhciAtIHRvcCBkYW1hZ2UgY2F1c2VzIikgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE0LCBhbmdsZSA9IDkwLCBoanVzdCA9IDEpKSArIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTQsIGhqdXN0ID0gMSkpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE0LCBoanVzdCA9IDAuNSkpICArIHNjYWxlX2ZpbGxfbWFudWFsKCJsZWdlbmQiLCB2YWx1ZXMgPSBjKCJEcm91Z2h0IiA9ICJyZWQiLCAiSGVhdCIgPSAiYmx1ZSIsICJFeGNlc3NpdmUgTW9pc3R1cmUiID0gImdyYXkiKSkgKyBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cz1jKDIwMDE6MjAxNSkpICsgc2NhbGVfeV9jb250aW51b3VzKGxhYmVsID0gdW5pdF9mb3JtYXQodW5pdCA9ICJNIiwgc2NhbGUgPSAxZS02LCBkaWdpdHMgPSAwKSkKCiNnZ3Bsb3QoQkFSTEVZX2RhbWFnZV90b3AsIGFlcyhmaWxsPWRhbWFnZWNhdXNlLCB5PWxvc3MsIHg9eWVhcikpICsgCiMgICAgZ2VvbV9iYXIoIHN0YXQ9ImlkZW50aXR5IikgKyB0aGVtZV9idygpICsgZ2d0aXRsZSgiSVBOVyBiYXJsZXkgbG9zcyB2cy4geWVhciAtIHRvcCBkYW1hZ2UgY2F1c2VzIikgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBhbmdsZSA9IDkwLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhbWlseSA9ICJTZXJpZiIpKSAgKyAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHM9YygyMDAxOjIwMTUpKSArIHRoZW1lKGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE0KSkgKyBzY2FsZV9maWxsX21hbnVhbCgibGVnZW5kIiwgdmFsdWVzID0gYygiRHJvdWdodCIgPSAicmVkIiwgIkhlYXQiID0gImJsdWUiLCAiRXhjZXNzaXZlIE1vaXN0dXJlIiA9ICJncmF5IikpICsgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2LCBmYWNlID0gImJvbGQiKSkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTgpKSArIHNjYWxlX3lfY29udGludW91cyhsYWJlbCA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiTSIsIHNjYWxlID0gMWUtNiwgZGlnaXRzID0gMCkpCgpwYXIobWFyID0gYyg1LCA1LCA0LCAxKSwgZmFtaWx5ID0gJ3NlcmlmJykKCmdncGxvdChCQVJMRVlfZGFtYWdlX3RvcCwgYWVzKGZpbGw9ZGFtYWdlY2F1c2UsIHk9bG9zcywgeD15ZWFyKSkgKyAKICAgIGdlb21fYmFyKCBzdGF0PSJpZGVudGl0eSIpICsgdGhlbWVfYncoKSArIHRoZW1lKHBhbmVsLmdyaWQubWFqb3I9ZWxlbWVudF9ibGFuaygpLHBhbmVsLmdyaWQubWlub3I9ZWxlbWVudF9ibGFuaygpKSArIGdndGl0bGUoIklQTlcgYmFybGV5IGxvc3MgdnMuIHllYXIgLSB0b3AgZGFtYWdlIGNhdXNlcyIpICsgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTYpLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZSA9IDE2KSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSwgYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCBmYW1pbHkgPSAiU2VyaWYiKSkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPTI4LCBmYW1pbHkgPSAiU2VyaWYiKSkgICsgIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9ICJZZWFycyIsIGxpbWl0cz1jKDIwMDE6MjAxNSkpICsgdGhlbWUobGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTQpKSArIHNjYWxlX2ZpbGxfbWFudWFsKCJsZWdlbmQiLCB2YWx1ZXMgPSBjKCJEcm91Z2h0IiA9ICJyZWQiLCAiSGVhdCIgPSAiYmx1ZSIsICJFeGNlc3NpdmUgTW9pc3R1cmUiID0gImdyYXkiKSkgKyB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTYsIGZhY2UgPSAiYm9sZCIpKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0yNCwgZmFtaWx5ID0gIlNlcmlmIiwgZmFjZSA9ICJib2xkIikpICsgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiSW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGFiZWwgPSB1bml0X2Zvcm1hdCh1bml0ID0gIk0iLCBzY2FsZSA9IDFlLTYsIGRpZ2l0cyA9IDApKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikKCgpiYXJsZXkgPC0gcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9iYXJsZXkKI2kgPC0gaW50ZXJhY3Rpb24ucGxvdCh4LmZhY3RvciAgICAgPSBiYXJsZXkkeWVhciwKIyAgICAgICAgICAgICAgICAgdHJhY2UuZmFjdG9yID0gYmFybGV5JGRhbWFnZWNhdXNlLCAKIyAgICAgICAgICAgICAgICAgdHJhY2UubGFiZWwgPSAiYmFybGV5IiwKIyAgICAgICAgICAgICAgICAgcmVzcG9uc2UgICAgID0gYmFybGV5JGxvc3MsIAojICAgICAgICAgICAgICAgICBmdW4gPSBzdW0sCiMgICAgICAgICAgICAgICAgIGxhcyA9IDMsCiMgICAgICAgICAgICAgICAgIHR5cGU9InAiLAojICAgICAgICAgICAgICAgICBjb2w9YygiYmxhY2siLCJyZWQiLCJncmVlbiIpLCAgIyMjIENvbG9ycyBmb3IgbGV2ZWxzIG9mIHRyYWNlIHZhci4KIyAgICAgICAgICAgICAgICAgcGNoPWMoMTksIDE3LCAxNSwgMTQsIDEzKSwgICAgICAgICAgICAgIyMjIFN5bWJvbHMgZm9yIGxldmVscyBvZiB0cmFjZSB2YXIuCiMgICAgICAgICAgICAgICAgIGZpeGVkPVRSVUUsICAgICAgICAgICAgICAgICAgICAjIyMgT3JkZXIgYnkgZmFjdG9yIG9yZGVyIGluIGRhdGEKIyAgICAgICAgICAgICAgICAgbGVnLmJ0eSA9ICJuIiwKIyAgICAgICAgICAgICAgICAgeWxhYj0iIiwKIyAgICAgICAgICAgICAgICAgeGxhYj0iWWVhciIsCiMgICAgICAgICAgICAgICAgIG1haW49IkludGVyYWN0aW9uIFBsb3QgLSBiYXJsZXkgTG9zcyB2cy4geWVhciAtIHRvcCBkYW1hZ2UgY2F1c2VzIiwgbGFzID0gMikKCiNFREEgZm9yIGJhcmxleQojLWJveHBsb3RzIG9mIGRhdGEgYnkgY3ViZSBsb3NzIGJ5IGVhY2ggb2YgdGhlIHRocmVlIGZhY3RvcnMKcGFyKG1hcj1jKDgsOCw0LDIpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3AgPSBjKDUsIDEsIDApKSAKCmJveHBsb3QobG9nMTBfbG9zcyB+IHllYXIsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5LCB5YXh0ID0gJ24nLCBjb2wgPSAibGlnaHRibHVlIiwgbGFzID0gMywgY2V4Lm1haW4gPSAxLjUsIGNleC5sYWIgPSAxLjQsIGNleC5heGlzID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSwgb3V0bGluZSA9IEZBTFNFKQoKcHRzIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2JhcmxleSRsb2cxMGxvc3MpCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5JGxvZzEwbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsIHNlcCA9ICIiKSkKCnRpdGxlKG1haW49IkxvZ3JpdGhtaWMgdHJhbnNmb3JtOiBJUE5XIGJhcmxleSBpbnN1cmFuY2UgbG9zcyBieSB5ZWFyIiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJZZWFycyIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iTG9nMTAgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKc3RyaXBjaGFydChsb2cxMF9sb3NzIH4geWVhciwgZGF0YSA9IHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5LCB2ZXJ0aWNhbCA9IFRSVUUsIAogICAgbWV0aG9kID0gImppdHRlciIsIGFkZCA9IFRSVUUsIHBjaCA9IDIwLCBjb2wgPSAnYmx1ZScpCgpwYXIobWFyPWMoMTAsOCw2LDIpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3AgPSBjKDUsIDEsIDApKSAKCmJveHBsb3QobG9nMTBfbG9zcyB+IGRhbWFnZWNhdXNlLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2JhcmxleSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9iYXJsZXkkbG9nMTBsb3NzKQpwdHMyIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2JhcmxleSRsb2cxMGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCBzZXAgPSAiIikpCgp0aXRsZShtYWluPSJMb2dyaXRobWljIHRyYW5zZm9ybTogSVBOVyBiYXJsZXkgaW5zdXJhbmNlIGxvc3NcbmJ5IGRhbWFnZSBjYXVzZSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iRGFtYWdlIGNhdXNlIiwgbGluZT02LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJMb2cxMCBpbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCgpzdHJpcGNoYXJ0KGxvZzEwX2xvc3MgfiBkYW1hZ2VjYXVzZSwgZGF0YSA9IHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5LCB2ZXJ0aWNhbCA9IFRSVUUsIAogICAgbWV0aG9kID0gImppdHRlciIsIGFkZCA9IFRSVUUsIHBjaCA9IDIwLCBjb2wgPSAnYmx1ZScpCgpwYXIobWFyPWMoMTAsOCw0LDIpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3AgPSBjKDUsIDEsIDApKSAKCmJveHBsb3QobG9nMTBfbG9zcyB+IGNvdW50eSwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9iYXJsZXksIHlheHQgPSAnbicsIGNvbCA9ICJsaWdodGJsdWUiLCBsYXMgPSAzLCBjZXgubWFpbiA9IDEuNSwgY2V4LmxhYiA9IDEuNCwgY2V4LmF4aXMgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxLCBvdXRsaW5lID0gRkFMU0UpCgpwdHMgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5JGxvZzEwbG9zcykKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9iYXJsZXkkbG9nMTBsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgc2VwID0gIiIpKQoKdGl0bGUobWFpbj0iTG9ncml0aG1pYyB0cmFuc2Zvcm06IElQTlcgYmFybGV5IGluc3VyYW5jZSBsb3NzIGJ5IGNvdW50eSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iQ291bnRpZXMiLCBsaW5lPTYsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IkxvZzEwIGluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCnN0cmlwY2hhcnQobG9nMTBfbG9zcyB+IGNvdW50eSwgZGF0YSA9IHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfYmFybGV5LCB2ZXJ0aWNhbCA9IFRSVUUsIAogICAgbWV0aG9kID0gImppdHRlciIsIGFkZCA9IFRSVUUsIHBjaCA9IDIwLCBjb2wgPSAnYmx1ZScpCgojLS0tMjAxMQoKbGlicmFyeShodG1sdG9vbHMpCiAgCiAgdGFnLm1hcC50aXRsZSA8LSB0YWdzJHN0eWxlKEhUTUwoIgogIC5sZWFmbGV0LWNvbnRyb2wubWFwLXRpdGxlIHsgCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDIwJSk7CiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDsKICAgIGxlZnQ6IDUwJTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmctbGVmdDogMTBweDsgCiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OyAKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogMTZweDsKICB9CgoubGVnZW5kIHsKICAgIHBhZGRpbmc6IDZweCAxMHB4IDZweCA2cHg7CiAgICBjb2xvcjogIzAwMDAzMzsKICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICBib3JkZXItbGVmdDo1cHggc29saWQgIzY2NjY2NjsKICAgIGJvcmRlci1yaWdodDo1cHggc29saWQgIzY2NjY2NjsKICAgIGJvcmRlci10b3A6NXB4IHNvbGlkICM2NjY2NjY7CiAgICBib3JkZXItYm90dG9tOjVweCBzb2xpZCAjNjY2NjY2Cn0KCgoKIikpCgp0aXRsZSA8LSB0YWdzJGRpdigKICB0YWcubWFwLnRpdGxlLCBIVE1MKCJJUE5XIGJhcmxleSBpbnN1cmFuY2UgTG9zcyBkdWUgdG8gZXhjZXNzaXZlIG1vaXN0dXJlLFxuMjAxMSIpCikgIAoKCgojLS0tLS0KIHBhbCA8LSBjb2xvck51bWVyaWMoY29sb3JSYW1wUGFsZXR0ZShjKCJsaWdodGJsdWUiLCAiYmx1ZSIpKSgxMSksIG5hLmNvbG9yID0gIiNmZmZmZmYiLAogICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZXZhbChwYXJzZSh0ZXh0PXBhc3RlKCJjb3VudHlfYmFybGV5X2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSQiLCAibG9zcyIsIHNlcD0iIikpKSkKCm1hcCA8LSBsZWFmbGV0KGRhdGEgPSBjb3VudHlfYmFybGV5X2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSwgb3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21Db250cm9sID0gRkFMU0UsIHpvb21TbmFwID0gMC4xKSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JQogIAogIGFkZE1pbmlNYXAoCiAgICB0aWxlcyA9IHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaXRlLAogICAgcG9zaXRpb24gPSAndG9wbGVmdCcsIAogICAgd2lkdGggPSAyMDAsIGhlaWdodCA9IDIwMCwKICAgIHRvZ2dsZURpc3BsYXkgPSBGQUxTRSkgJT4lCiAgCiAgCiAgICNhZGRDb250cm9sKHRpdGxlLCBwb3NpdGlvbiA9ICJ0b3BsZWZ0IiwgY2xhc3NOYW1lPSJtYXAtdGl0bGUiKSAlPiUKICAKICAKICBmaXRCb3VuZHMoZXh0ZVsxXSwgZXh0ZVszXSwgZXh0ZVsyXSwgZXh0ZVs0XSkgJT4lIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5wYWwoY291bnR5X2JhcmxleV9leGNlc3NpdmVtb2lzdHVyZTIwMTEkbG9zcyksICBmaWxsT3BhY2l0eSA9IC44LCB3ZWlnaHQgPSAxLCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIGFkZFBvbHlnb25zKGRhdGEgPSBzdGF0ZXMsIGZpbGxPcGFjaXR5ID0gMCwgd2VpZ2h0ID0gNCwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSAKICAKICAgIGFkZExlZ2VuZChwYWwgPSBwYWwsIHZhbHVlcyA9IG5hLm9taXQofmxvc3MpLCBncm91cCA9ICJjaXJjbGVzIiwgdGl0bGUgPSBwYXN0ZSgiQmFybGV5IGV4Y2Vzc2l2ZTxicj5tb2lzdHVyZSAyMDExIiwgc2VwID0gIiIpLCBuYS5sYWJlbCA9ICIiLCBwb3NpdGlvbiA9ICJ0b3ByaWdodCIsIGxhYkZvcm1hdCA9IGxhYmVsRm9ybWF0KHByZWZpeCA9ICIkIikpICU+JQoKICAKICAKCmFkZExhYmVsT25seU1hcmtlcnMoZGF0YSA9IGNvdW50eV9iYXJsZXlfZXhjZXNzaXZlbW9pc3R1cmUyMDExLCBsbmcgPSBsYXRfbG9uZ1ssMV0sIGxhdCA9IGxhdF9sb25nWywyXSwgbGFiZWwgPSBsYXBwbHkobGFicywgSFRNTCksIGxhYmVsT3B0aW9ucyA9IGxhYmVsT3B0aW9ucyhzdHlsZSA9IGxpc3QoImZvbnQtZmFtaWx5IiA9ICJzZXJpZiIpLCBub0hpZGUgPSBUUlVFLCBkaXJlY3Rpb24gPSAnbWlkZGxlJywgdGV4dE9ubHkgPSBUUlVFLCB0ZXh0c2l6ZSA9ICIxOHB4IiwgY29sID0gIndoaXRlIiwgIG9mZnNldCA9IGMoMjAsIDApLCBtYXJrZXJPcHRpb25zKHJpc2VPbkhvdmVyID0gVFJVRSkKKSkgCiAgICAgICAgCmFkZFNjYWxlQmFyKG1hcCwgcG9zaXRpb24gPSBjKCJ0b3ByaWdodCIpLCBvcHRpb25zID0gc2NhbGVCYXJPcHRpb25zKCkpCgoKcGFyKG1hcj1jKDcuOCwgNi4xLCA2LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCiAgYmFycGxvdChCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZXhjZXNzaXZlbW9pc3R1cmUyMDExJGxvc3MsIG5hbWVzLmFyZyA9IEJBUkxFWV9kYW1hZ2VfdG9wX2FnZ19leGNlc3NpdmVtb2lzdHVyZTIwMTEkTkFNRSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKICAKcHRzIDwtIHByZXR0eShCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZXhjZXNzaXZlbW9pc3R1cmUyMDExJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZXhjZXNzaXZlbW9pc3R1cmUyMDExJGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCgp0aXRsZShtYWluPSJJUE5XIGJhcmxleSBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gZXhjZXNzaXZlIG1vaXN0dXJlXG4yMDExIiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJZZWFycyIsIGxpbmU9NiwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iSW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKCiMtLS0yMDE1CgpsaWJyYXJ5KGh0bWx0b29scykKICAKICB0YWcubWFwLnRpdGxlIDwtIHRhZ3Mkc3R5bGUoSFRNTCgiCiAgLmxlYWZsZXQtY29udHJvbC5tYXAtdGl0bGUgeyAKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMjAlKTsKICAgIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50OwogICAgbGVmdDogNTAlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZy1sZWZ0OiAxMHB4OyAKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7IAogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiAxNnB4OwogIH0KIikpCgp0aXRsZSA8LSB0YWdzJGRpdigKICB0YWcubWFwLnRpdGxlLCBIVE1MKCJJUE5XIGJhcmxleSBpbnN1cmFuY2UgTG9zcyBkdWUgdG8gZHJvdWdodCBhbmQgaGVhdCxcbjIwMTUiKQopICAKCgoKIy0tLS0tCgogcGFsIDwtIGNvbG9yTnVtZXJpYyhjb2xvclJhbXBQYWxldHRlKGMoInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIikpKDExKSwgbmEuY29sb3IgPSAiI2ZmZmZmZiIsCiAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSBldmFsKHBhcnNlKHRleHQ9cGFzdGUoImNvdW50eV9iYXJsZXlfZHJvdWdodGhlYXQyMDE1JCIsICJsb3NzIiwgc2VwPSIiKSkpKQoKbWFwIDwtIGxlYWZsZXQoZGF0YSA9IGNvdW50eV9iYXJsZXlfZHJvdWdodGhlYXQyMDE1LCBvcHRpb25zID0gbGVhZmxldE9wdGlvbnMoem9vbUNvbnRyb2wgPSBGQUxTRSwgem9vbVNuYXAgPSAwLjEpKSAlPiUgIAogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJEh5ZGRhLkJhc2UpICU+JQogICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaW5lcykgJT4lCiAgCiAgYWRkTWluaU1hcCgKICAgIHRpbGVzID0gcHJvdmlkZXJzJFN0YW1lbi5Ub25lckxpdGUsCiAgICBwb3NpdGlvbiA9ICd0b3BsZWZ0JywgCiAgICB3aWR0aCA9IDIwMCwgaGVpZ2h0ID0gMjAwLAogICAgdG9nZ2xlRGlzcGxheSA9IEZBTFNFKSAlPiUKICAKICAKICAgI2FkZENvbnRyb2wodGl0bGUsIHBvc2l0aW9uID0gInRvcGxlZnQiLCBjbGFzc05hbWU9Im1hcC10aXRsZSIpICU+JQogIAogIAogIGZpdEJvdW5kcyhleHRlWzFdLCBleHRlWzNdLCBleHRlWzJdLCBleHRlWzRdKSAlPiUgYWRkUG9seWdvbnMoZmlsbENvbG9yID0gfnBhbChjb3VudHlfYmFybGV5X2Ryb3VnaHRoZWF0MjAxNSRsb3NzKSwgIGZpbGxPcGFjaXR5ID0gLjgsIHdlaWdodCA9IDEsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgYWRkUG9seWdvbnMoZGF0YSA9IHN0YXRlcywgZmlsbE9wYWNpdHkgPSAwLCB3ZWlnaHQgPSA0LCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIAogIAogICAgYWRkTGVnZW5kKHBhbCA9IHBhbCwgdmFsdWVzID0gbmEub21pdCh+bG9zcyksIGdyb3VwID0gImNpcmNsZXMiLCB0aXRsZSA9IHBhc3RlKCJCYXJsZXkgZHJvdWdodDxicj5oZWF0IDIwMTUiLCBzZXAgPSAiIiksIG5hLmxhYmVsID0gIiIsIHBvc2l0aW9uID0gInRvcHJpZ2h0IiwgbGFiRm9ybWF0ID0gbGFiZWxGb3JtYXQocHJlZml4ID0gIiQiKSkgJT4lCgogIAogIAoKYWRkTGFiZWxPbmx5TWFya2VycyhkYXRhID0gY291bnR5X2JhcmxleV9kcm91Z2h0aGVhdDIwMTUsIGxuZyA9IGxhdF9sb25nWywxXSwgbGF0ID0gbGF0X2xvbmdbLDJdLCBsYWJlbCA9IGxhcHBseShsYWJzLCBIVE1MKSwgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKHN0eWxlID0gbGlzdCgiZm9udC1mYW1pbHkiID0gInNlcmlmIiksIG5vSGlkZSA9IFRSVUUsIGRpcmVjdGlvbiA9ICdtaWRkbGUnLCB0ZXh0T25seSA9IFRSVUUsIHRleHRzaXplID0gIjE4cHgiLCBjb2wgPSAid2hpdGUiLCAgb2Zmc2V0ID0gYygyMCwgMCksIG1hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQopKSAKICAgICAgICAKYWRkU2NhbGVCYXIobWFwLCBwb3NpdGlvbiA9IGMoInRvcHJpZ2h0IiksIG9wdGlvbnMgPSBzY2FsZUJhck9wdGlvbnMoKSkKCgoKcGFyKG1hcj1jKDcuOCwgNi4xLCA2LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCiAgYmFycGxvdChCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDE1JGxvc3MsIG5hbWVzLmFyZyA9IEJBUkxFWV9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTUkTkFNRSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKICAKcHRzIDwtIHByZXR0eShCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDE1JGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDE1JGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCgp0aXRsZShtYWluPSJJUE5XIGJhcmxleSBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gZHJvdWdodCBhbmQgaGVhdFxuMjAxNSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTYsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9Ikluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCgoKIy0tLTIwMDEgLSAyMDE1CgpsaWJyYXJ5KGh0bWx0b29scykKICAKICB0YWcubWFwLnRpdGxlIDwtIHRhZ3Mkc3R5bGUoSFRNTCgiCiAgLmxlYWZsZXQtY29udHJvbC5tYXAtdGl0bGUgeyAKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMjAlKTsKICAgIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50OwogICAgbGVmdDogNTAlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZy1sZWZ0OiAxMHB4OyAKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7IAogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiAxNnB4OwogIH0KIikpCgp0aXRsZSA8LSB0YWdzJGRpdigKICB0YWcubWFwLnRpdGxlLCBIVE1MKCJCYXJsZXkgSW5zdXJhbmNlIExvc3MgZHVlIHRvIGRyb3VnaHQgYW5kIGhlYXQsXG4gMjAwMSB0byAyMDE1IikKKSAgCgoKCiMtLS0tLQoKIHBhbCA8LSBjb2xvck51bWVyaWMoY29sb3JSYW1wUGFsZXR0ZShjKCJsaWdodHllbGxvdyIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpKSgxMSksIG5hLmNvbG9yID0gIiNmZmZmZmYiLAogICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZXZhbChwYXJzZSh0ZXh0PXBhc3RlKCJjb3VudHlfYmFybGV5X2Ryb3VnaHRoZWF0JCIsICJsb3NzIiwgc2VwPSIiKSkpKQoKbWFwIDwtIGxlYWZsZXQoZGF0YSA9IGNvdW50eV9iYXJsZXlfZHJvdWdodGhlYXQsIG9wdGlvbnMgPSBsZWFmbGV0T3B0aW9ucyh6b29tQ29udHJvbCA9IEZBTFNFLCB6b29tU25hcCA9IDAuMSkpICU+JSAgCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkSHlkZGEuQmFzZSkgJT4lCiAgIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJFN0YW1lbi5Ub25lckxpbmVzKSAlPiUKICAKICBhZGRNaW5pTWFwKAogICAgdGlsZXMgPSBwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGl0ZSwKICAgIHBvc2l0aW9uID0gJ3RvcGxlZnQnLCAKICAgIHdpZHRoID0gMjAwLCBoZWlnaHQgPSAyMDAsCiAgICB0b2dnbGVEaXNwbGF5ID0gRkFMU0UpICU+JQogIAogIAogICAjYWRkQ29udHJvbCh0aXRsZSwgcG9zaXRpb24gPSAidG9wbGVmdCIsIGNsYXNzTmFtZT0ibWFwLXRpdGxlIikgJT4lCiAgCiAgCiAgZml0Qm91bmRzKGV4dGVbMV0sIGV4dGVbM10sIGV4dGVbMl0sIGV4dGVbNF0pICU+JSBhZGRQb2x5Z29ucyhmaWxsQ29sb3IgPSB+cGFsKGNvdW50eV9iYXJsZXlfZHJvdWdodGhlYXQkbG9zcyksICBmaWxsT3BhY2l0eSA9IC44LCB3ZWlnaHQgPSAxLCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIGFkZFBvbHlnb25zKGRhdGEgPSBzdGF0ZXMsIGZpbGxPcGFjaXR5ID0gMCwgd2VpZ2h0ID0gNCwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSAKICAKICAgIGFkZExlZ2VuZChwYWwgPSBwYWwsIHZhbHVlcyA9IG5hLm9taXQofmxvc3MpLCBncm91cCA9ICJjaXJjbGVzIiwgdGl0bGUgPSBwYXN0ZSgiQmFybGV5IGRyb3VnaHQ8YnI+aGVhdCAyMDAxIHRvIDIwMTUiLCBzZXAgPSAiIiksIG5hLmxhYmVsID0gIiIsIHBvc2l0aW9uID0gInRvcHJpZ2h0IiwgbGFiRm9ybWF0ID0gbGFiZWxGb3JtYXQocHJlZml4ID0gIiQiKSkgJT4lCgogIAogIAoKYWRkTGFiZWxPbmx5TWFya2VycyhkYXRhID0gY291bnR5X2JhcmxleV9kcm91Z2h0aGVhdCwgbG5nID0gbGF0X2xvbmdbLDFdLCBsYXQgPSBsYXRfbG9uZ1ssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMsIEhUTUwpLCBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoc3R5bGUgPSBsaXN0KCJmb250LWZhbWlseSIgPSAic2VyaWYiKSwgbm9IaWRlID0gVFJVRSwgZGlyZWN0aW9uID0gJ21pZGRsZScsIHRleHRPbmx5ID0gVFJVRSwgdGV4dHNpemUgPSAiMThweCIsIGNvbCA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCikpIAogICAgICAgIAphZGRTY2FsZUJhcihtYXAsIHBvc2l0aW9uID0gYygidG9wcmlnaHQiKSwgb3B0aW9ucyA9IHNjYWxlQmFyT3B0aW9ucygpKQoKI21hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQogIyBhZGRMZWdlbmQoY29sb3JzID0gfk5BTUUsIGxhYmVscyA9IH5OQU1FLCB2YWx1ZXMgPSB+TkFNRSwgb3BhY2l0eSA9IDAuNSwgdGl0bGUgPSBOVUxMLAogICMgICAgICAgICAgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiKQoKcGFyKG1hcj1jKDcuOCwgNi4xLCA2LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCiAgYmFycGxvdChCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQkbG9zcywgbmFtZXMuYXJnID0gQkFSTEVZX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0JE5BTUUsIHlheHQgPSAnbicsIGNvbCA9ICJsaWdodGJsdWUiLCBsYXMgPSAzLCBjZXgubWFpbiA9IDEuNSwgY2V4LmxhYiA9IDEuNCwgY2V4LmF4aXMgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxLCBvdXRsaW5lID0gRkFMU0UpCiAgCnB0cyA8LSBwcmV0dHkoQkFSTEVZX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0JGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShCQVJMRVlfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKCnRpdGxlKG1haW49IklQTlcgYmFybGV5IGluc3VyYW5jZSBsb3NzIGR1ZSB0byBkcm91Z2h0IGFuZCBoZWF0IFxuIDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTYsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9Ikluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCgpgYGAKCjxicj48L2JyPgoKIVtdKGh0dHBzOi8vZG1pbmUuaW8vd2FmL2ltZy9TdGVwMS5wbmcpCgo8YnI+PC9icj4KPGRpdiBhbGlnbj0ibGVmdCI+CgojIyBTVEVQIDEwOiBXSEVBVCwgMjAwMS0yMDE1IGZvciB0aGUgSVBOVwoKPGRpdiBhbGlnbj0iY2VudGVyIj4KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXJyb3I9VFJVRSwgZWNobz1GQUxTRSwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA3fQoKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ3JpZEV4dHJhKQoKI3BpZSBjaGFydCBmb3IgMjAwNy0yMDE1CgpvcHRpb25zKHNjaXBlbj05OTkpCgphZGROb0Fuc3dlciA8LSBmdW5jdGlvbih4KXsKICBpZihpcy5mYWN0b3IoeCkpIHJldHVybihmYWN0b3IoeCwgbGV2ZWxzPWMobGV2ZWxzKHgpLCAiTm8gQW5zd2VyIikpKQogIHJldHVybih4KQp9CgpXSEVBVCA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZSwgY29tbW9kaXR5ID09ICJXSEVBVCIpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1IDwtIGFnZ3JlZ2F0ZShXSEVBVCRsb3NzLCBsaXN0KFdIRUFUJGRhbWFnZWNhdXNlKSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQoKcGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGUgPC0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNVtvcmRlcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1JGxvc3MpLF0gClggPC0gcGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGVbb3JkZXIocGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGUkbG9zcyksXSAKI2NvbG5hbWVzKFgpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQpzdW1tYXJ5X2RhdGFzZXQgPC0gWCAlPiUgZmlsdGVyKGxvc3MgPCAyMDAwMDAwKSAKc3VtbWFyeV9kYXRhc2V0MiA8LSBYICU+JSBmaWx0ZXIobG9zcyA+IDIwMDAwMDApIApjb2xuYW1lcyhzdW1tYXJ5X2RhdGFzZXQpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQpZIDwtIHN1bShzdW1tYXJ5X2RhdGFzZXQkbG9zcykKWVkgPC0gYygiT3RoZXIiLCBZKQpZWSA8LSBkYXRhLmZyYW1lKHQoWVkpKQpjb2xuYW1lcyhZWSkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpCllZWSA8LSByYmluZChzdW1tYXJ5X2RhdGFzZXQyLCBZWSkKI2ZhY3RvcihZWVkpCgpZWVkgPC0gYXMuZGF0YS5mcmFtZShsYXBwbHkoWVlZLCBhZGROb0Fuc3dlcikpCllZWSRsb3NzIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKFlZWSRsb3NzKSkKWVlZMTwtIFlZWVtvcmRlcihZWVkkbG9zcyksXSAKWVlZMSA8LSBZWVkxWyBucm93KFlZWTEpOjEsIF0KCnAgPC0gcGxvdF9seShZWVksIGxhYmVscyA9IH5kYW1hZ2VjYXVzZSwgdmFsdWVzID0gfmxvc3MsIHR5cGUgPSAncGllJywKICAgICAgICAgICAgIHRleHRwb3NpdGlvbiA9ICdpbnNpZGUnLAogICAgICAgICAgICAgdGV4dGluZm8gPSAnbGFiZWwrcGVyY2VudCcsCiAgICAgICAgICAgICBpbnNpZGV0ZXh0Zm9udCA9IGxpc3QoY29sb3IgPSAnI0ZGRkZGRicpLAogICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLAogICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnJCcsIGxvc3MsICcgYmlsbGlvbnMnKSwKICAgICAgICAgICAgIG1hcmtlciA9IGxpc3QoY29sb3JzID0gY29sb3JzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGlzdChjb2xvciA9ICcjRkZGRkZGJywgd2lkdGggPSAxKSksCiAgICAgICAgICAgICAjVGhlICdwdWxsJyBhdHRyaWJ1dGUgY2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUgc3BhY2UgYmV0d2VlbiB0aGUgc2VjdG9ycwogICAgICAgICAgICAgc2hvd2xlZ2VuZCA9IFRSVUUpICU+JQogIGxheW91dCh0aXRsZSA9ICdUb3AgRGFtYWdlIENhdXNlcyBmb3IgV0hFQVQsIFBhbG91c2UgUmVnaW9uOiAxOTg5LTIwMTUnLAogICAgICAgICB4YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwgemVyb2xpbmUgPSBGQUxTRSwgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSksCiAgICAgICAgIHlheGlzID0gbGlzdChzaG93Z3JpZCA9IEZBTFNFLCB6ZXJvbGluZSA9IEZBTFNFLCBzaG93dGlja2xhYmVscyA9IEZBTFNFKSkKCiAgCiNwICAgICAgICAgCgpZWVkyIDwtIFlZWTEKI2xldmVscyhZWVkyJGRhbWFnZWNhdXNlKVs3XSA8LSAiRXhjZXNzaXZlIE1vaXN0dXJlIgoKWVlZMiRsb3NzIDwtIHJvdW5kKFlZWTIkbG9zcywgZGlnaXRzID0gMCkKWVlZMiRsb3NzIDwtIGZvcm1hdChZWVkyJGxvc3MsYmlnLm1hcms9IiwiLHNjaWVudGlmaWM9RkFMU0UpCllZWTIkbG9zcyA8LSBwYXN0ZSgiJCIsIFlZWTIkbG9zcywgc2VwPSIiKQpZWVkyJGxvc3MgPC0gZ3N1YigiICIsICIiLCBZWVkyJGxvc3MsIGZpeGVkID0gVFJVRSkKCgpsZXZlbHMoWVlZMSRkYW1hZ2VjYXVzZSlbbGV2ZWxzKFlZWTEkZGFtYWdlY2F1c2UpPT0iT3RoZXIgKFNub3ctTGlnaHRuaW5nLUV0Yy4pIl0gPC0gIlNub3cvTGlnaHRuaW5nIgpsZXZlbHMoWVlZMSRkYW1hZ2VjYXVzZSlbOF0gPC0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIKWVlZMSRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IoWVlZMSRkYW1hZ2VjYXVzZSkKCiMtLXllYXIKcGFsb3VzZV9zdW1sb3NzX3llYXIgPC0gYWdncmVnYXRlKFdIRUFUJGxvc3MsIGxpc3QoV0hFQVQkeWVhciksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfeWVhcikgPC0gYygieWVhciIsICJsb3NzIikKCiMtLWNvdW50eQoKcGFsb3VzZV9zdW1sb3NzX2NvdW50eSA8LSBhZ2dyZWdhdGUoV0hFQVQkbG9zcywgbGlzdChXSEVBVCRjb3VudHkpLCBGVU4gPSAic3VtIikKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzX2NvdW50eSkgPC0gYygiY291bnR5IiwgImxvc3MiKQoKcGFyKG1hcj1jKDEyLjUsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQpiYXJwbG90KHBhbG91c2Vfc3VtbG9zc19jb3VudHkkbG9zcywgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzX2NvdW50eSRjb3VudHksIGNleC5uYW1lcyA9IDEuNCwgbGFzID0gMywgeWF4dD0ibiIsICBjb2wgPSAibGlnaHRibHVlIikKcHRzIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfY291bnR5JGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfY291bnR5JGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCiNtdGV4dCh0ZXh0ID0gIkRhbWFnZSBDYXVzZSIsCiMgICAgICBzaWRlID0gMSwjc2lkZSAxID0gYm90dG9tCiMgICAgICBsaW5lID0gOCkKCnRpdGxlKG1haW49IklQTlcgd2hlYXQgaW5zdXJhbmNlIGxvc3MgYnkgY29tbW9kaXR5OiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT04LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJJbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCgpwYXIobWFyPWMoMTIuNSwgNi4xLCA0LCAyLjEpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg0LCAxLCAwKSwgbGFzPTApCmJhcnBsb3QocGFsb3VzZV9zdW1sb3NzX3llYXIkbG9zcywgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzX3llYXIkeWVhciwgY2V4Lm5hbWVzID0gMS40LCBsYXMgPSAzLCB5YXh0PSJuIiwgIGNvbCA9ICJsaWdodGJsdWUiKQpwdHMgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc195ZWFyJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfeWVhciRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCgojbXRleHQodGV4dCA9ICJZZWFycyIsCiMgICAgICBzaWRlID0gMSwjc2lkZSAxID0gYm90dG9tCiMgICAgICBsaW5lID0gOCkKCnRpdGxlKG1haW49IklQTlcgd2hlYXQgaW5zdXJhbmNlIGxvc3MgYnkgeWVhcjogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJZZWFycyIsIGxpbmU9OCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iSW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKcGFyKG1hcj1jKDEzLCA2LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDQsIDEsIDApLCBsYXM9MCkKCmJhcnBsb3QoWVlZMSRsb3NzLCBuYW1lcy5hcmcgPSBZWVkxJGRhbWFnZWNhdXNlLCBsYXMgPSAzLCBjZXgubmFtZXMgPSAxLjQsIHlheHQ9Im4iLCBjb2wgPSAibGlnaHRibHVlIikKcHRzIDwtIHByZXR0eShZWVkxJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShZWVkxJGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCnRpdGxlKG1haW49IklQTlcgd2hlYXQgaW5zdXJhbmNlIGxvc3MgYnkgZGFtYWdlIGNhdXNlOiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCnRpdGxlKHhsYWI9IkRhbWFnZSBDYXVzZSIsIGxpbmU9MTEuNSwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iV2hlYXQgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT01LCBjZXgubGFiID0gMS40KQoKI210ZXh0KHRleHQgPSAiRGFtYWdlIENhdXNlIiwKIyAgICAgIHNpZGUgPSAxLCNzaWRlIDEgPSBib3R0b20KIyAgICAgIGxpbmUgPSAxMCkKCmh0bWxUYWJsZShZWVkyLAogICAgICAgICAgY2dyb3VwID0gYygiMjAwMS0yMDE1IiksCiAgICAgICAgIGNhcHRpb24gPSAiSVBOVyByZWdpb24gV0hFQVQgdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgZGFtYWdlIGNhdXNlLCAyMDAxLTIwMTUiLAogICAgICAgICAgYWxpZ24gPSAiYyIsCiAgICAgICAgICBybmFtZXMgPSBGQUxTRSwKICAgICAgICAgIGNzcy5jZWxsID0gInBhZGRpbmctbGVmdDogLjVlbTsgcGFkZGluZy1yaWdodDogLjVlbTsiKQoKCiMjU3RlcCA3OiBOYXRpb253aWRlIFdoZWF0IFByaWNlcyBwZXIgbWV0cmljIHRvbjogMjAwMS0yMDE1IAoKd2hlYXRwcmljZSA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvVVNEQXByaWNlcy93aGVhdHByaWNlc18xOTk4XzIwMTcuY3N2IiwgaGVhZGVyPVRSVUUsIHN0cmlwLndoaXRlID1UUlVFKQpjb2xuYW1lcyh3aGVhdHByaWNlKSA8LSBjKCJ5ZWFyIiwgIm1vbnRoIiwicHJpY2UiKQp3aGVhdHByaWNlX2FsbCA8LSBzdWJzZXQod2hlYXRwcmljZSwgeWVhciA+PSAyMDAxICYgeWVhciA8PSAyMDE1KQoKY3BpIDwtIGRhdGEuZnJhbWUocmVhZC5jc3YoIi9kbWluZS9kYXRhL0ZSRUQvY3BpL0NQSUFVQ1NMMjAwMV8yMDE1LmNzdiIsIGhlYWRlciA9IFRSVUUsIHN0cmlwLndoaXRlID0gVFJVRSkpCgp3aGVhdHByaWNlX2FsbCRwcmljZV9hZGp1c3RlZCA8LSB3aGVhdHByaWNlX2FsbCRwcmljZSAqIGNwaSRyYXRpbwpjb2xuYW1lcyh3aGVhdHByaWNlX2FsbCkgPC0gYygieWVhciIsICJtb250aCIsInByaWNlIiwgInByaWNlX2FkanVzdGVkIikKCnBhcihtYXI9Yyg1LjgsIDcuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoMywgMSwgMCksIGxhcz0wKQoKcGxvdCh3aGVhdHByaWNlX2FsbCRwcmljZV9hZGp1c3RlZCwgbGFzID0gMywgeGF4dCA9ICduJywgeWF4dCA9ICduJywgbGFzID0gMiwgY2V4Lm5hbWVzID0gMS40LCBjb2wgPSAibGlnaHRibHVlIiwgeGxhYiA9ICIiLCB5bGFiID0gIiIsIHlsaW09YygxMDAsNTAwKSkKbGluZXMod2hlYXRwcmljZV9hbGwkcHJpY2VfYWRqdXN0ZWQsIGNvbCA9ICJibHVlIikKcG9pbnRzKHdoZWF0cHJpY2VfYWxsJHByaWNlLCBsYXMgPSAzLCB4YXh0ID0gJ24nLCBjZXgubmFtZXMgPSAxLjQsIGNvbCA9ICJsaWdodGJsdWUiLCB4bGFiID0gIiIsIHlsYWIgPSAiIikKbGluZXMod2hlYXRwcmljZV9hbGwkcHJpY2UsIGNvbCA9ICJyZWQiKQoKcHRzIDwtIHByZXR0eShtYXgod2hlYXRwcmljZV9hbGwkcHJpY2VfYWRqdXN0ZWQpOm1pbih3aGVhdHByaWNlX2FsbCRwcmljZSkpCnB0czIgPC0gcHJldHR5KG1heCh3aGVhdHByaWNlX2FsbCRwcmljZV9hZGp1c3RlZCk6bWluKHdoZWF0cHJpY2VfYWxsJHByaWNlKSkKCgppIDwtIHNlcSgxLG5yb3cod2hlYXRwcmljZV9hbGwpLDEyKSAjIHdoaWNoIGxhYmVscyB0byBwbG90CmZvcihpaSBpbiBpKQogIGF4aXMoMSwgYXQgPSBpaSwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHdoZWF0cHJpY2VfYWxsW2lpLDFdLCAgbHdkID0gMCwgbGFzID0gMykKCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBjZXguYXhpcyA9IDEuNCwgbGFiZWxzID0gcGFzdGUocHRzLCBzZXAgPSAiIikpCgpsZWdlbmQoMSwgNTAwLCBsZWdlbmQ9YygiV2hlYXQgcHJpY2UiLCAiV2hlYXQgcHJpY2UgYWRqdXN0ZWQgXG4gZm9yIGluZmxhdGlvbiIpLAogICAgICAgY29sPWMoInJlZCIsICJibHVlIiksIGx0eT0xOjEsIGNleD0xLjQpCgp0aXRsZShtYWluPSJVLlMuIHdoZWF0IHByaWNlcyBwZXIgbWV0cmljIHRvbiAoJCk6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBhZGogPSAwLCBjZXgubWFpbiA9IDEuOSkKdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IlByaWNlIHBlciBtZXRyaWMgdG9uICgkKSIsIGxpbmU9My41LCBjZXgubGFiID0gMS40KQoKIy0td2hlYXQgcHJvZHVjdGlvbiBQTlcgMjAwMSAtIDIwMTUKCndoZWF0cHJvZHVjdGlvbiA8LSByZWFkLmNzdigiL2RtaW5lL2RhdGEvTkFTUy93aGVhdHByb2R1Y3Rpb25fV0FfSURfT1JfMjAwMV8yMDE1LmNzdiIsIGhlYWRlcj1UUlVFLCBzdHJpcC53aGl0ZSA9VFJVRSkKY29sbmFtZXMod2hlYXRwcmljZSkgPC0gYygieWVhciIsICJtb250aCIsInByaWNlIikKCmdncGxvdCh3aGVhdHByb2R1Y3Rpb24sIGFlcyhmaWxsPVN0YXRlLCB5PVZhbHVlLCB4PVllYXIpKSArIAogICAgZ2VvbV9iYXIoIHN0YXQ9ImlkZW50aXR5IikgKyB0aGVtZV9idygpICsgdGhlbWUocGFuZWwuZ3JpZC5tYWpvcj1lbGVtZW50X2JsYW5rKCkscGFuZWwuZ3JpZC5taW5vcj1lbGVtZW50X2JsYW5rKCkpICsgZ2d0aXRsZSgiUE5XIFdoZWF0IHByb2R1Y3Rpb24sIDIwMDEgdG8gMjAxNSAiKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuOSksIGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIiksIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9MjgsIGZhbWlseSA9ICJTZXJpZiIpKSAgKyAgc2NhbGVfeF9kaXNjcmV0ZShuYW1lID0gIlllYXJzIiwgbGltaXRzPWMoMjAwMToyMDE1KSkgKyB0aGVtZShsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNCkpICArIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiwgZmFjZSA9ICJib2xkIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTI0LCBmYW1pbHkgPSAiU2VyaWYiLCBmYWNlID0gImJvbGQiKSkgKyBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJXaGVhdCBwcm9kdWN0aW9uICgkKSIsIGxhYmVsID0gdW5pdF9mb3JtYXQodW5pdCA9ICJNIiwgc2NhbGUgPSAxZS02LCBkaWdpdHMgPSAwKSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgc2NhbGVfZmlsbF9tYW51YWwoImxlZ2VuZCIsIHZhbHVlcyA9IGMoIklEQUhPIiA9ICJncmF5IiwgIk9SRUdPTiIgPSAiYmx1ZSIsICJXQVNISU5HVE9OIiA9ICJyZWQiKSkKCiN3aGVhdHByaWNlX3llYXIgPC0gYWdncmVnYXRlKHdoZWF0cHJpY2VfYWxsJHByaWNlLCBsaXN0KHdoZWF0cHJpY2UkeWVhciksIEZVTj0ibWVhbiIpCiNjb2xuYW1lcyh3aGVhdHByaWNlX3llYXIpIDwtIGMoInllYXIiLCAicHJpY2UiKQoKCiNwYXIobWFyPWMoNS44LCA3LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDMsIDEsIDApLCBsYXM9MCkKI2JhcnBsb3Qod2hlYXRwcmljZV95ZWFyJHByaWNlLCBuYW1lcy5hcmcgPSB3aGVhdHByaWNlX3llYXIkeWVhciwgbGFzID0gMywgeWF4dCA9ICduJywgY2V4Lm5hbWVzID0gMS40LCBjb2wgPSAibGlnaHRibHVlIiwgeGxhYiA9ICIiLCB5bGFiID0gIiIpCgojdGl0bGUobWFpbj0iVVMgV2hlYXQgcHJpY2VzIHBlciBtZXRyaWMgdG9uICgkKTogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGFkaiA9IDAsIGNleC5tYWluID0gMS45KQojdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCiN0aXRsZSh5bGFiPSJQcmljZSBwZXIgbWV0cmljIHRvbiAoJCkiLCBsaW5lPTMuNSwgY2V4LmxhYiA9IDEuNCkKI2F4aXMoMiwgbGFzID0gMSwgY2V4LmF4aXMgPSAxLjQsIGF0ID0gYygwLDUwLDEwMCwxNTAsMjAwLDI1MCwzMDAsMzUwKSwgbGFiZWxzID0gYygwLDUwLDEwMCwxNTAsMjAwLDI1MCwzMDAsMzUwKSkKCmBgYAoKPGRpdiBhbGlnbj0iY2VudGVyIj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPVRSVUUsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gN30KCmxpYnJhcnkoUkNvbG9yQnJld2VyKQoKIy0taW50ZXJhY3Rpb24gcGxvdCBsb3NzIHZzIHllYXIgZm9yIGFsbCBkYW1hZ2UgY2F1c2VzLCBhbGwgUGFsb3VzZSBjb3VudGllcwpsZXZlbHMoV0hFQVQkZGFtYWdlY2F1c2UpWzhdIDwtICJFeGNlc3NpdmUgTW9pc3R1cmUiCldIRUFUJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihXSEVBVCRkYW1hZ2VjYXVzZSkKCldIRUFUX2RhbWFnZSA8LSBzdWJzZXQoV0hFQVQsIGRhbWFnZWNhdXNlID09ICJEcm91Z2h0IiB8IGRhbWFnZWNhdXNlID09ICJIZWF0IiB8IGRhbWFnZWNhdXNlID09ICJEZWNsaW5lIGluIFByaWNlIiB8IGRhbWFnZWNhdXNlID09ICJGcm9zdCIgfCBkYW1hZ2VjYXVzZSA9PSAiSGFpbCIgfCBkYW1hZ2VjYXVzZSA9PSAiRXhjZXNzaXZlIE1vaXN0dXJlIiB8IGRhbWFnZWNhdXNlID09ICJGcmVlemUiIHwgZGFtYWdlY2F1c2UgPT0gIkNvbGQgV2ludGVyIiB8IGRhbWFnZWNhdXNlID09ICJDb2xkIFdldCBXZWF0aGVyIikKV0hFQVRfZGFtYWdlJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihXSEVBVF9kYW1hZ2UkZGFtYWdlY2F1c2UpCgojYWdncmVnYXRlKFdIRUFUX2RhbWFnZSRsb3NzLCBsaXN0KFdIRUFUX2RhbWFnZSRkYW1hZ2VjYXVzZSksIEZVTiA9ICJzdW0iKQoKV0hFQVRfZGFtYWdlX3RvcCA8LSBzdWJzZXQoV0hFQVRfZGFtYWdlLCBkYW1hZ2VjYXVzZSA9PSAiSGVhdCIgfCBkYW1hZ2VjYXVzZSA9PSAiRHJvdWdodCIgIHwgZGFtYWdlY2F1c2UgPT0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIpCgpXSEVBVF9kYW1hZ2VfdG9wX2RlY2xpbmUgPC0gc3Vic2V0KFdIRUFUX2RhbWFnZSwgZGFtYWdlY2F1c2UgPT0gIkhlYXQiIHwgZGFtYWdlY2F1c2UgPT0gIkRyb3VnaHQiIHwgZGFtYWdlY2F1c2UgPT0gIkRlY2xpbmUgaW4gUHJpY2UiKQoKV0hFQVRfZGFtYWdlX3RvcCRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IoV0hFQVRfZGFtYWdlX3RvcCRkYW1hZ2VjYXVzZSwgbGV2ZWxzID0gYygiRXhjZXNzaXZlIE1vaXN0dXJlIiwgIkhlYXQiLCAiRHJvdWdodCIpKQoKV0hFQVRfZGFtYWdlX3RvcF9kZWNsaW5lJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihXSEVBVF9kYW1hZ2VfdG9wX2RlY2xpbmUkZGFtYWdlY2F1c2UsIGxldmVscyA9IGMoIkRlY2xpbmUgaW4gUHJpY2UiLCAiSGVhdCIsICJEcm91Z2h0IikpCgoKCldIRUFUX2RhbWFnZV9kcm91Z2h0aGVhdCA8LSBzdWJzZXQoV0hFQVRfZGFtYWdlLCBkYW1hZ2VjYXVzZSA9PSAiSGVhdCIgfCBkYW1hZ2VjYXVzZSA9PSAiRHJvdWdodCIpCldIRUFUX2RhbWFnZV9kcm91Z2h0aGVhdDIwMDkgPC0gc3Vic2V0KFdIRUFUX2RhbWFnZSwgeWVhciA9PSAyMDA5KQpXSEVBVF9kYW1hZ2VfZHJvdWdodGhlYXQyMDExIDwtIHN1YnNldChXSEVBVF9kYW1hZ2UsIHllYXIgPT0gMjAxMSkKV0hFQVRfZGFtYWdlX2Ryb3VnaHRoZWF0MjAxNSA8LSBzdWJzZXQoV0hFQVRfZGFtYWdlLCB5ZWFyID09IDIwMTUpCgoKCgoKV0hFQVRfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQgPC0gYWdncmVnYXRlKFdIRUFUX2RhbWFnZV9kcm91Z2h0aGVhdCRsb3NzLCBieSA9IGxpc3QoV0hFQVRfZGFtYWdlX2Ryb3VnaHRoZWF0JGNvdW50eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdCkgPC0gYygiTkFNRSIsICJsb3NzIikKCmNvdW50eV93aGVhdF9kcm91Z2h0aGVhdCA8LSBtZXJnZShjb3VudGllcywgV0hFQVRfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQsIGJ5ID0gIk5BTUUiKQoKV0hFQVRfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDA5IDwtIGFnZ3JlZ2F0ZShXSEVBVF9kYW1hZ2VfZHJvdWdodGhlYXQyMDA5JGxvc3MsIGJ5ID0gbGlzdChXSEVBVF9kYW1hZ2VfZHJvdWdodGhlYXQyMDA5JGNvdW50eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMDkpIDwtIGMoIk5BTUUiLCAibG9zcyIpCgpjb3VudHlfd2hlYXRfZHJvdWdodGhlYXQyMDA5IDwtIG1lcmdlKGNvdW50aWVzLCBXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMDksIGJ5ID0gIk5BTUUiKQoKV0hFQVRfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDExIDwtIGFnZ3JlZ2F0ZShXSEVBVF9kYW1hZ2VfZHJvdWdodGhlYXQyMDExJGxvc3MsIGJ5ID0gbGlzdChXSEVBVF9kYW1hZ2VfZHJvdWdodGhlYXQyMDExJGNvdW50eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTEpIDwtIGMoIk5BTUUiLCAibG9zcyIpCgpjb3VudHlfd2hlYXRfZHJvdWdodGhlYXQyMDExIDwtIG1lcmdlKGNvdW50aWVzLCBXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTEsIGJ5ID0gIk5BTUUiKQoKV0hFQVRfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDE1IDwtIGFnZ3JlZ2F0ZShXSEVBVF9kYW1hZ2VfZHJvdWdodGhlYXQyMDE1JGxvc3MsIGJ5ID0gbGlzdChXSEVBVF9kYW1hZ2VfZHJvdWdodGhlYXQyMDE1JGNvdW50eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTUpIDwtIGMoIk5BTUUiLCAibG9zcyIpCgpjb3VudHlfd2hlYXRfZHJvdWdodGhlYXQyMDE1IDwtIG1lcmdlKGNvdW50aWVzLCBXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTUsIGJ5ID0gIk5BTUUiKQoKCiNnZ3Bsb3QoV0hFQVRfZGFtYWdlX3RvcCwgYWVzKGZpbGw9ZGFtYWdlY2F1c2UsIHk9bG9zcywgeD15ZWFyKSkgKyAKIyAgICBnZW9tX2Jhciggc3RhdD0iaWRlbnRpdHkiKSArIHRoZW1lX2J3KCkgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDApKSArIGdndGl0bGUoIldIRUFUIExvc3MgdnMuIHllYXIgLSB0b3AgZGFtYWdlIGNhdXNlcyIpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsgc2NhbGVfZmlsbF9tYW51YWwoImxlZ2VuZCIsIHZhbHVlcyA9IGMoIkRyb3VnaHQiID0gInJlZCIsICJIZWF0IiA9ICJibHVlIiwgIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIgPSAiZ3JheSIpKSArIHNjYWxlX3hfZGlzY3JldGUobGltaXRzPWMoMjAwMToyMDE1KSkgKyBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWwgPSB1bml0X2Zvcm1hdCh1bml0ID0gIk0iLCBzY2FsZSA9IDFlLTYsIGRpZ2l0cyA9IDApKQoKI2dncGxvdChXSEVBVF9kYW1hZ2VfdG9wLCBhZXMoZmlsbD1kYW1hZ2VjYXVzZSwgeT1sb3NzLCB4PXllYXIpKSArIAojICAgIGdlb21fYmFyKCBzdGF0PSJpZGVudGl0eSIpICsgdGhlbWVfYncoKSArIGdndGl0bGUoIklQTlcgd2hlYXQgbG9zcyB2cy4geWVhciAtIHRvcCBkYW1hZ2UgY2F1c2VzIikgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBhbmdsZSA9IDkwLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhbWlseSA9ICJTZXJpZiIpKSAgKyAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHM9YygyMDAxOjIwMTUpKSArIHRoZW1lKGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE0KSkgKyBzY2FsZV9maWxsX21hbnVhbCgibGVnZW5kIiwgdmFsdWVzID0gYygiRHJvdWdodCIgPSAicmVkIiwgIkhlYXQiID0gImJsdWUiLCAiRXhjZXNzaXZlIE1vaXN0dXJlIiA9ICJncmF5IikpICsgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2LCBmYWNlID0gImJvbGQiKSkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTgpKSArIHNjYWxlX3lfY29udGludW91cyhsYWJlbCA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiTSIsIHNjYWxlID0gMWUtNiwgZGlnaXRzID0gMCkpCgpwYXIobWFyID0gYyg1LCA1LCA0LCAxKSwgZmFtaWx5ID0gJ3NlcmlmJykKCmdncGxvdChXSEVBVF9kYW1hZ2VfdG9wLCBhZXMoZmlsbD1kYW1hZ2VjYXVzZSwgeT1sb3NzLCB4PXllYXIpKSArIAogICAgZ2VvbV9iYXIoIHN0YXQ9ImlkZW50aXR5IikgKyB0aGVtZV9idygpICsgdGhlbWUocGFuZWwuZ3JpZC5tYWpvcj1lbGVtZW50X2JsYW5rKCkscGFuZWwuZ3JpZC5taW5vcj1lbGVtZW50X2JsYW5rKCkpICsgZ2d0aXRsZSgiSVBOVyB3aGVhdCBsb3NzIHZzLiB5ZWFyIC0gdG9wIGRhbWFnZSBjYXVzZXMiKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0yOCwgZmFtaWx5ID0gIlNlcmlmIikpICArICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSAiWWVhcnMiLCBsaW1pdHM9YygyMDAxOjIwMTUpKSArIHRoZW1lKGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE0KSkgKyBzY2FsZV9maWxsX21hbnVhbCgibGVnZW5kIiwgdmFsdWVzID0gYygiRHJvdWdodCIgPSAicmVkIiwgIkhlYXQiID0gImJsdWUiLCAiRXhjZXNzaXZlIE1vaXN0dXJlIiA9ICJncmF5IikpICsgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2LCBmYWNlID0gImJvbGQiKSkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MjQsIGZhbWlseSA9ICJTZXJpZiIsIGZhY2UgPSAiYm9sZCIpKSArIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIkluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxhYmVsID0gdW5pdF9mb3JtYXQodW5pdCA9ICJNIiwgc2NhbGUgPSAxZS02LCBkaWdpdHMgPSAwKSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpCgojLS1kZWNsaW5lIGluIHByaWNlIHJlcGxhY2luZyBleGNlc3MgbW9pc3R1cmUKCnBhcihtYXIgPSBjKDUsIDUsIDQsIDEpLCBmYW1pbHkgPSAnc2VyaWYnKQoKZ2dwbG90KFdIRUFUX2RhbWFnZV90b3BfZGVjbGluZSwgYWVzKGZpbGw9ZGFtYWdlY2F1c2UsIHk9bG9zcywgeD15ZWFyKSkgKyAKICAgIGdlb21fYmFyKCBzdGF0PSJpZGVudGl0eSIpICsgdGhlbWVfYncoKSArIHRoZW1lKHBhbmVsLmdyaWQubWFqb3I9ZWxlbWVudF9ibGFuaygpLHBhbmVsLmdyaWQubWlub3I9ZWxlbWVudF9ibGFuaygpKSArIGdndGl0bGUoIklQTlcgd2hlYXQgbG9zcyB2cy4geWVhciAtIHRvcCBkYW1hZ2UgY2F1c2VzICsgRGVjbGluZSBpbiBQcmljZSIpICsgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTYpLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZSA9IDE2KSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSwgYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCBmYW1pbHkgPSAiU2VyaWYiKSkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPTI4LCBmYW1pbHkgPSAiU2VyaWYiKSkgICsgIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9ICJZZWFycyIsIGxpbWl0cz1jKDIwMDE6MjAxNSkpICsgdGhlbWUobGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTQpKSArIHNjYWxlX2ZpbGxfbWFudWFsKCJsZWdlbmQiLCB2YWx1ZXMgPSBjKCJEcm91Z2h0IiA9ICJyZWQiLCAiSGVhdCIgPSAiYmx1ZSIsICJEZWNsaW5lIGluIFByaWNlIiA9ICJncmF5IikpICsgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2LCBmYWNlID0gImJvbGQiKSkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MjQsIGZhbWlseSA9ICJTZXJpZiIsIGZhY2UgPSAiYm9sZCIpKSArIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIkluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxhYmVsID0gdW5pdF9mb3JtYXQodW5pdCA9ICJNIiwgc2NhbGUgPSAxZS02LCBkaWdpdHMgPSAwKSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpCgoKCgoKCndoZWF0IDwtIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQKI2kgPC0gaW50ZXJhY3Rpb24ucGxvdCh4LmZhY3RvciAgICAgPSB3aGVhdCR5ZWFyLAojICAgICAgICAgICAgICAgICB0cmFjZS5mYWN0b3IgPSB3aGVhdCRkYW1hZ2VjYXVzZSwgCiMgICAgICAgICAgICAgICAgIHRyYWNlLmxhYmVsID0gIndoZWF0IiwKIyAgICAgICAgICAgICAgICAgcmVzcG9uc2UgICAgID0gd2hlYXQkbG9zcywgCiMgICAgICAgICAgICAgICAgIGZ1biA9IHN1bSwKIyAgICAgICAgICAgICAgICAgbGFzID0gMywKIyAgICAgICAgICAgICAgICAgdHlwZT0iYiIsCiMgICAgICAgICAgICAgICAgIGNvbD1jKCJibGFjayIsInJlZCIsImdyZWVuIiksICAjIyMgQ29sb3JzIGZvciBsZXZlbHMgb2YgdHJhY2UgdmFyLgojICAgICAgICAgICAgICAgICBwY2g9YygxOSwgMTcsIDE1LCAxNCwgMTMpLCAgICAgICAgICAgICAjIyMgU3ltYm9scyBmb3IgbGV2ZWxzIG9mIHRyYWNlIHZhci4KIyAgICAgICAgICAgICAgICAgZml4ZWQ9VFJVRSwgICAgICAgICAgICAgICAgICAgICMjIyBPcmRlciBieSBmYWN0b3Igb3JkZXIgaW4gZGF0YQojICAgICAgICAgICAgICAgICBsZWcuYnR5ID0gIm4iLAojICAgICAgICAgICAgICAgICB5bGFiPSIiLAojICAgICAgICAgICAgICAgICB4bGFiPSJZZWFyIiwKIyAgICAgICAgICAgICAgICAgbWFpbj0iSW50ZXJhY3Rpb24gUGxvdCAtIFdIRUFUIExvc3MgdnMuIHllYXIgLSB0b3AgZGFtYWdlIGNhdXNlcyIsIGxhcyA9IDIpCgojRURBIGZvciB3aGVhdAoKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUsIGNvbW1vZGl0eSA9PSAiV0hFQVQiKQpwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0MiA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIsIGRhbWFnZWNhdXNlICE9ICJIdXJyaWNhbmUvVHJvcGljYWwgRGVwcmVzc2lvbiIpCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQyIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0MiwgZGFtYWdlY2F1c2UgIT0gIkluYWJpbGl0eSB0byBQcmVwYXJlIExhbmQgZm9yIElyciIpCgpsZXZlbHMocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIkZGFtYWdlY2F1c2UpWzhdIDwtICJFeGNlc3NpdmUgTW9pc3R1cmUiCmxldmVscyhwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0MiRkYW1hZ2VjYXVzZSlbMjRdIDwtICJTbm93L0xpZ2huaW5nIgoKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIkZGFtYWdlY2F1c2UgPC0gZmFjdG9yKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQyJGRhbWFnZWNhdXNlKQoKIy1ib3hwbG90cyBvZiBkYXRhIGJ5IGN1YmUgbG9zcyBieSBlYWNoIG9mIHRoZSB0aHJlZSBmYWN0b3JzCnBhcihtYXI9YygxMCw4LDYsMiksIGZhbWlseSA9ICdzZXJpZicsIG1ncCA9IGMoNSwgMSwgMCkpIApib3hwbG90KGxvZzEwX2xvc3MgfiB5ZWFyLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0MiwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIkbG9nMTBfbG9zcykKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIkbG9nMTBfbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsIHNlcCA9ICIiKSkKCnRpdGxlKG1haW49IkxvZ3JpdGhtaWMgdHJhbnNmb3JtOiBJUE5XIHdoZWF0IGluc3VyYW5jZSBsb3NzXG5ieSB5ZWFyIiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJZZWFycyIsIGxpbmU9NSwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iTG9nMTAgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKc3RyaXBjaGFydChsb2cxMF9sb3NzIH4geWVhciwgZGF0YSA9IHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQyLCB2ZXJ0aWNhbCA9IFRSVUUsIAogICAgbWV0aG9kID0gImppdHRlciIsIGFkZCA9IFRSVUUsIHBjaCA9IDIwLCBjb2wgPSAnYmx1ZScpCgpwYXIobWFyPWMoMTQsOCw2LDIpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3AgPSBjKDUsIDEsIDApKSAKCmJveHBsb3QobG9nMTBfbG9zcyB+IGRhbWFnZWNhdXNlLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0MiwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIkbG9nMTBfbG9zcykKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIkbG9nMTBfbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsIHNlcCA9ICIiKSkKCnRpdGxlKG1haW49IkxvZ3JpdGhtaWMgdHJhbnNmb3JtOiBJUE5XIHdoZWF0IGluc3VyYW5jZSBsb3NzXG5ieSBkYW1hZ2UgY2F1c2UiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkRhbWFnZSBjYXVzZSIsIGxpbmU9MTIsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IkxvZzEwIGluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCnN0cmlwY2hhcnQobG9nMTBfbG9zcyB+IGRhbWFnZWNhdXNlLCBkYXRhID0gcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIsIHZlcnRpY2FsID0gVFJVRSwgCiAgICBtZXRob2QgPSAiaml0dGVyIiwgYWRkID0gVFJVRSwgcGNoID0gMjAsIGNvbCA9ICdibHVlJykKCnBhcihtYXI9YygxMCw4LDYsMiksIGZhbWlseSA9ICdzZXJpZicsIG1ncCA9IGMoNSwgMSwgMCkpIAoKYm94cGxvdChsb2cxMF9sb3NzIH4gY291bnR5LCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0MiwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIkbG9nMTBfbG9zcykKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdDIkbG9nMTBfbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsIHNlcCA9ICIiKSkKCnRpdGxlKG1haW49IkxvZ3JpdGhtaWMgdHJhbnNmb3JtOiBJUE5XIHdoZWF0IGluc3VyYW5jZSBsb3NzXG5ieSBjb3VudHkiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT03LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJMb2cxMCBpbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCgpzdHJpcGNoYXJ0KGxvZzEwX2xvc3MgfiBjb3VudHksIGRhdGEgPSBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0MiwgdmVydGljYWwgPSBUUlVFLCAKICAgIG1ldGhvZCA9ICJqaXR0ZXIiLCBhZGQgPSBUUlVFLCBwY2ggPSAyMCwgY29sID0gJ2JsdWUnKQoKIy0tLQoKbGlicmFyeShodG1sdG9vbHMpCiAgCiAgdGFnLm1hcC50aXRsZSA8LSB0YWdzJHN0eWxlKEhUTUwoIgogIC5sZWFmbGV0LWNvbnRyb2wubWFwLXRpdGxlIHsgCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDIwJSk7CiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDsKICAgIGxlZnQ6IDUwJTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmctbGVmdDogMTBweDsgCiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OyAKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogMTZweDsKICB9CiIpKQoKdGl0bGUgPC0gdGFncyRkaXYoCiAgdGFnLm1hcC50aXRsZSwgSFRNTCgiSVBOVyB3aGVhdCBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gZHJvdWdodCBhbmQgaGVhdCxcbiAyMDAxIHRvIDIwMTUiKQopIAoKCiMtLWFsbCB5ZWFycwoKIHBhbCA8LSBjb2xvck51bWVyaWMoY29sb3JSYW1wUGFsZXR0ZShjKCJsaWdodHllbGxvdyIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpKSgxMSksIG5hLmNvbG9yID0gIiNmZmZmZmYiLAogICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZXZhbChwYXJzZSh0ZXh0PXBhc3RlKCJjb3VudHlfd2hlYXRfZHJvdWdodGhlYXQkIiwgImxvc3MiLCBzZXA9IiIpKSkpCgptYXAgPC0gbGVhZmxldChkYXRhID0gY291bnR5X3doZWF0X2Ryb3VnaHRoZWF0LCBvcHRpb25zID0gbGVhZmxldE9wdGlvbnMoem9vbUNvbnRyb2wgPSBGQUxTRSwgem9vbVNuYXAgPSAwLjEpKSAlPiUgIAogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJEh5ZGRhLkJhc2UpICU+JQogICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaW5lcykgJT4lCiAgCiAgYWRkTWluaU1hcCgKICAgIHRpbGVzID0gcHJvdmlkZXJzJFN0YW1lbi5Ub25lckxpdGUsCiAgICBwb3NpdGlvbiA9ICd0b3BsZWZ0JywgCiAgICB3aWR0aCA9IDIwMCwgaGVpZ2h0ID0gMjAwLAogICAgdG9nZ2xlRGlzcGxheSA9IEZBTFNFKSAlPiUKICAKICAKICAgI2FkZENvbnRyb2wodGl0bGUsIHBvc2l0aW9uID0gInRvcGxlZnQiLCBjbGFzc05hbWU9Im1hcC10aXRsZSIpICU+JQogIAogIAogIGZpdEJvdW5kcyhleHRlWzFdLCBleHRlWzNdLCBleHRlWzJdLCBleHRlWzRdKSAlPiUgYWRkUG9seWdvbnMoZmlsbENvbG9yID0gfnBhbChjb3VudHlfd2hlYXRfZHJvdWdodGhlYXQkbG9zcyksICBmaWxsT3BhY2l0eSA9IC44LCB3ZWlnaHQgPSAxLCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIGFkZFBvbHlnb25zKGRhdGEgPSBzdGF0ZXMsIGZpbGxPcGFjaXR5ID0gMCwgd2VpZ2h0ID0gNCwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSAKICAKICAgIGFkZExlZ2VuZChwYWwgPSBwYWwsIHZhbHVlcyA9IG5hLm9taXQofmxvc3MpLCBncm91cCA9ICJjaXJjbGVzIiwgdGl0bGUgPSBwYXN0ZSgiV2hlYXQgZHJvdWdodDxicj5oZWF0IDIwMDEgdG8gMjAxNSIsIHNlcCA9ICIiKSwgbmEubGFiZWwgPSAiIiwgcG9zaXRpb24gPSAidG9wcmlnaHQiLCBsYWJGb3JtYXQgPSBsYWJlbEZvcm1hdChwcmVmaXggPSAiJCIpKSAlPiUKCiAgCiAgCgphZGRMYWJlbE9ubHlNYXJrZXJzKGRhdGEgPSBjb3VudHlfd2hlYXRfZHJvdWdodGhlYXQsIGxuZyA9IGxhdF9sb25nWywxXSwgbGF0ID0gbGF0X2xvbmdbLDJdLCBsYWJlbCA9IGxhcHBseShsYWJzLCBIVE1MKSwgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKHN0eWxlID0gbGlzdCgiZm9udC1mYW1pbHkiID0gInNlcmlmIiksIG5vSGlkZSA9IFRSVUUsIGRpcmVjdGlvbiA9ICdtaWRkbGUnLCB0ZXh0T25seSA9IFRSVUUsIHRleHRzaXplID0gIjE4cHgiLCBjb2wgPSAid2hpdGUiLCAgb2Zmc2V0ID0gYygyMCwgMCksIG1hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQopKSAKICAgICAgICAKYWRkU2NhbGVCYXIobWFwLCBwb3NpdGlvbiA9IGMoInRvcHJpZ2h0IiksIG9wdGlvbnMgPSBzY2FsZUJhck9wdGlvbnMoKSkKCgoKI21hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQogIyBhZGRMZWdlbmQoY29sb3JzID0gfk5BTUUsIGxhYmVscyA9IH5OQU1FLCB2YWx1ZXMgPSB+TkFNRSwgb3BhY2l0eSA9IDAuNSwgdGl0bGUgPSBOVUxMLAogICMgICAgICAgICAgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiKQoKcGFyKG1hcj1jKDEwLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgpiYXJwbG90KFdIRUFUX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0JGxvc3MsIG5hbWVzLmFyZyA9IFdIRUFUX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0JE5BTUUsIHlheHQgPSAnbicsIGNvbCA9ICJsaWdodGJsdWUiLCBsYXMgPSAzLCBjZXgubWFpbiA9IDEuNSwgY2V4LmxhYiA9IDEuNCwgY2V4LmF4aXMgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxLCBvdXRsaW5lID0gRkFMU0UpCiAgCgpwdHMgPC0gcHJldHR5KFdIRUFUX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0JGxvc3MvMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoV0hFQVRfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKdGl0bGUobWFpbj0iMjAwMSB0byAyMDE1IElQTlcgd2hlYXQgaW5zdXJhbmNlIGxvc3MgXG5kdWUgdG8gZHJvdWdodCBhbmQgaGVhdCBieSBjb3VudHkiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT03LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJJbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTUsIGNleC5sYWIgPSAxLjQpCgoKCgoKCiAgCiAgIy0tLQoKbGlicmFyeShodG1sdG9vbHMpCiAgCiAgdGFnLm1hcC50aXRsZSA8LSB0YWdzJHN0eWxlKEhUTUwoIgogIC5sZWFmbGV0LWNvbnRyb2wubWFwLXRpdGxlIHsgCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDIwJSk7CiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDsKICAgIGxlZnQ6IDUwJTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmctbGVmdDogMTBweDsgCiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OyAKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogMTZweDsKICB9CiIpKQoKdGl0bGUgPC0gdGFncyRkaXYoCiAgdGFnLm1hcC50aXRsZSwgSFRNTCgiSVBOVyB3aGVhdCBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gZHJvdWdodCBhbmQgaGVhdFxuIDIwMTEiKQopICAKCiMtMjAxMQoKIHBhbCA8LSBjb2xvck51bWVyaWMoY29sb3JSYW1wUGFsZXR0ZShjKCJsaWdodHllbGxvdyIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpKSgxMSksIG5hLmNvbG9yID0gIiNmZmZmZmYiLAogICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZXZhbChwYXJzZSh0ZXh0PXBhc3RlKCJjb3VudHlfd2hlYXRfZHJvdWdodGhlYXQyMDExJCIsICJsb3NzIiwgc2VwPSIiKSkpKQoKbWFwIDwtIGxlYWZsZXQoZGF0YSA9IGNvdW50eV93aGVhdF9kcm91Z2h0aGVhdDIwMTEsIG9wdGlvbnMgPSBsZWFmbGV0T3B0aW9ucyh6b29tQ29udHJvbCA9IEZBTFNFLCB6b29tU25hcCA9IDAuMSkpICU+JSAgCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkSHlkZGEuQmFzZSkgJT4lCiAgIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJFN0YW1lbi5Ub25lckxpbmVzKSAlPiUKICAKICBhZGRNaW5pTWFwKAogICAgdGlsZXMgPSBwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGl0ZSwKICAgIHBvc2l0aW9uID0gJ3RvcGxlZnQnLCAKICAgIHdpZHRoID0gMjAwLCBoZWlnaHQgPSAyMDAsCiAgICB0b2dnbGVEaXNwbGF5ID0gRkFMU0UpICU+JQogIAogIAogICAjYWRkQ29udHJvbCh0aXRsZSwgcG9zaXRpb24gPSAidG9wbGVmdCIsIGNsYXNzTmFtZT0ibWFwLXRpdGxlIikgJT4lCiAgCiAgCiAgZml0Qm91bmRzKGV4dGVbMV0sIGV4dGVbM10sIGV4dGVbMl0sIGV4dGVbNF0pICU+JSBhZGRQb2x5Z29ucyhmaWxsQ29sb3IgPSB+cGFsKGNvdW50eV93aGVhdF9kcm91Z2h0aGVhdDIwMTEkbG9zcyksICBmaWxsT3BhY2l0eSA9IC44LCB3ZWlnaHQgPSAxLCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIGFkZFBvbHlnb25zKGRhdGEgPSBzdGF0ZXMsIGZpbGxPcGFjaXR5ID0gMCwgd2VpZ2h0ID0gNCwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSAKICAKICAgIGFkZExlZ2VuZChwYWwgPSBwYWwsIHZhbHVlcyA9IG5hLm9taXQofmxvc3MpLCBncm91cCA9ICJjaXJjbGVzIiwgdGl0bGUgPSBwYXN0ZSgiV2hlYXQgZHJvdWdodDxicj5oZWF0IDIwMTEiLCBzZXAgPSAiIiksIG5hLmxhYmVsID0gIiIsIHBvc2l0aW9uID0gInRvcHJpZ2h0IiwgbGFiRm9ybWF0ID0gbGFiZWxGb3JtYXQocHJlZml4ID0gIiQiKSkgJT4lCgoKYWRkTGFiZWxPbmx5TWFya2VycyhkYXRhID0gY291bnR5X3doZWF0X2Ryb3VnaHRoZWF0MjAxMSwgbG5nID0gbGF0X2xvbmdbLDFdLCBsYXQgPSBsYXRfbG9uZ1ssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMsIEhUTUwpLCBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoc3R5bGUgPSBsaXN0KCJmb250LWZhbWlseSIgPSAic2VyaWYiKSwgbm9IaWRlID0gVFJVRSwgZGlyZWN0aW9uID0gJ21pZGRsZScsIHRleHRPbmx5ID0gVFJVRSwgdGV4dHNpemUgPSAiMThweCIsIGNvbCA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCikpIAogICAgICAgIAphZGRTY2FsZUJhcihtYXAsIHBvc2l0aW9uID0gYygidG9wcmlnaHQiKSwgb3B0aW9ucyA9IHNjYWxlQmFyT3B0aW9ucygpKQogIAoKI21hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQogIyBhZGRMZWdlbmQoY29sb3JzID0gfk5BTUUsIGxhYmVscyA9IH5OQU1FLCB2YWx1ZXMgPSB+TkFNRSwgb3BhY2l0eSA9IDAuNSwgdGl0bGUgPSBOVUxMLAogICMgICAgICAgICAgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiKQoKcGFyKG1hcj1jKDEwLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgpiYXJwbG90KFdIRUFUX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0MjAxMSRsb3NzLCBuYW1lcy5hcmcgPSBXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTEkTkFNRSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKICAKICAgIHB0cyA8LSBwcmV0dHkoV0hFQVRfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDExJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTEkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKdGl0bGUobWFpbj0iMjAxMSBJUE5XIHdoZWF0IGluc3VyYW5jZSBsb3NzIGR1ZSB0byBkcm91Z2h0IGFuZCBoZWF0XG5ieSBjb3VudHkiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT03LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJJbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTUsIGNleC5sYWIgPSAxLjQpCiAgCiAgIy0tLQoKbGlicmFyeShodG1sdG9vbHMpCiAgCiAgdGFnLm1hcC50aXRsZSA8LSB0YWdzJHN0eWxlKEhUTUwoIgogIC5sZWFmbGV0LWNvbnRyb2wubWFwLXRpdGxlIHsgCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDIwJSk7CiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDsKICAgIGxlZnQ6IDUwJTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmctbGVmdDogMTBweDsgCiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OyAKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogMTZweDsKICB9CiIpKQoKdGl0bGUgPC0gdGFncyRkaXYoCiAgdGFnLm1hcC50aXRsZSwgSFRNTCgiSVBOVyB3aGVhdCBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gZHJvdWdodCBhbmQgaGVhdFxuIDIwMDkiKQopIAogIAoKIy0yMDA5CgogcGFsIDwtIGNvbG9yTnVtZXJpYyhjb2xvclJhbXBQYWxldHRlKGMoImxpZ2h0eWVsbG93IiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIikpKDExKSwgbmEuY29sb3IgPSAiI2ZmZmZmZiIsCiAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSBldmFsKHBhcnNlKHRleHQ9cGFzdGUoImNvdW50eV93aGVhdF9kcm91Z2h0aGVhdDIwMDkkIiwgImxvc3MiLCBzZXA9IiIpKSkpCgptYXAgPC0gbGVhZmxldChkYXRhID0gY291bnR5X3doZWF0X2Ryb3VnaHRoZWF0MjAwOSwgb3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21Db250cm9sID0gRkFMU0UsIHpvb21TbmFwID0gMC4xKSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JQogIAogIGFkZE1pbmlNYXAoCiAgICB0aWxlcyA9IHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaXRlLAogICAgcG9zaXRpb24gPSAndG9wbGVmdCcsIAogICAgd2lkdGggPSAyMDAsIGhlaWdodCA9IDIwMCwKICAgIHRvZ2dsZURpc3BsYXkgPSBGQUxTRSkgJT4lCiAgCiAgCiAgICNhZGRDb250cm9sKHRpdGxlLCBwb3NpdGlvbiA9ICJ0b3BsZWZ0IiwgY2xhc3NOYW1lPSJtYXAtdGl0bGUiKSAlPiUKICAKICAKICBmaXRCb3VuZHMoZXh0ZVsxXSwgZXh0ZVszXSwgZXh0ZVsyXSwgZXh0ZVs0XSkgJT4lIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5wYWwoY291bnR5X3doZWF0X2Ryb3VnaHRoZWF0MjAwOSRsb3NzKSwgIGZpbGxPcGFjaXR5ID0gLjgsIHdlaWdodCA9IDEsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgYWRkUG9seWdvbnMoZGF0YSA9IHN0YXRlcywgZmlsbE9wYWNpdHkgPSAwLCB3ZWlnaHQgPSA0LCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIAogIAogICAgYWRkTGVnZW5kKHBhbCA9IHBhbCwgdmFsdWVzID0gbmEub21pdCh+bG9zcyksIGdyb3VwID0gImNpcmNsZXMiLCB0aXRsZSA9IHBhc3RlKCJXaGVhdCBkcm91Z2h0PGJyPmhlYXQgMjAwOSIsIHNlcCA9ICIiKSwgbmEubGFiZWwgPSAiIiwgcG9zaXRpb24gPSAidG9wcmlnaHQiLCBsYWJGb3JtYXQgPSBsYWJlbEZvcm1hdChwcmVmaXggPSAiJCIpKSAlPiUKCgphZGRMYWJlbE9ubHlNYXJrZXJzKGRhdGEgPSBjb3VudHlfd2hlYXRfZHJvdWdodGhlYXQyMDA5LCBsbmcgPSBsYXRfbG9uZ1ssMV0sIGxhdCA9IGxhdF9sb25nWywyXSwgbGFiZWwgPSBsYXBwbHkobGFicywgSFRNTCksIGxhYmVsT3B0aW9ucyA9IGxhYmVsT3B0aW9ucyhzdHlsZSA9IGxpc3QoImZvbnQtZmFtaWx5IiA9ICJzZXJpZiIpLCBub0hpZGUgPSBUUlVFLCBkaXJlY3Rpb24gPSAnbWlkZGxlJywgdGV4dE9ubHkgPSBUUlVFLCB0ZXh0c2l6ZSA9ICIxOHB4IiwgY29sID0gIndoaXRlIiwgIG9mZnNldCA9IGMoMjAsIDApLCBtYXJrZXJPcHRpb25zKHJpc2VPbkhvdmVyID0gVFJVRSkKKSkgCiAgICAgICAgCmFkZFNjYWxlQmFyKG1hcCwgcG9zaXRpb24gPSBjKCJ0b3ByaWdodCIpLCBvcHRpb25zID0gc2NhbGVCYXJPcHRpb25zKCkpCgoKI21hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQogIyBhZGRMZWdlbmQoY29sb3JzID0gfk5BTUUsIGxhYmVscyA9IH5OQU1FLCB2YWx1ZXMgPSB+TkFNRSwgb3BhY2l0eSA9IDAuNSwgdGl0bGUgPSBOVUxMLAogICMgICAgICAgICAgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiKQoKcGFyKG1hcj1jKDEwLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgpiYXJwbG90KFdIRUFUX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0MjAwOSRsb3NzLCBuYW1lcy5hcmcgPSBXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMDkkTkFNRSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKICAKICAgIHB0cyA8LSBwcmV0dHkoV0hFQVRfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDA5JGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMDkkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQogCgp0aXRsZShtYWluPSIyMDA5IElQTlcgd2hlYXQgaW5zdXJhbmNlIGxvc3MgZHVlIHRvIGRyb3VnaHQgYW5kIGhlYXRcbmJ5IGNvdW50eSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iQ291bnRpZXMiLCBsaW5lPTcsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9Ikluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NSwgY2V4LmxhYiA9IDEuNCkKICAKCiAgIy0tLQoKbGlicmFyeShodG1sdG9vbHMpCiAgCiAgdGFnLm1hcC50aXRsZSA8LSB0YWdzJHN0eWxlKEhUTUwoIgogIC5sZWFmbGV0LWNvbnRyb2wubWFwLXRpdGxlIHsgCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDIwJSk7CiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDsKICAgIGxlZnQ6IDUwJTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmctbGVmdDogMTBweDsgCiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OyAKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogMTZweDsKICB9CiIpKQoKdGl0bGUgPC0gdGFncyRkaXYoCiAgdGFnLm1hcC50aXRsZSwgSFRNTCgiSVBOVyB3aGVhdCBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gZHJvdWdodCBhbmQgaGVhdFxuIDIwMTUiKQopIAoKIy0yMDE1CgogcGFsIDwtIGNvbG9yTnVtZXJpYyhjb2xvclJhbXBQYWxldHRlKGMoImxpZ2h0eWVsbG93IiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIikpKDExKSwgbmEuY29sb3IgPSAiI2ZmZmZmZiIsCiAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSBldmFsKHBhcnNlKHRleHQ9cGFzdGUoImNvdW50eV93aGVhdF9kcm91Z2h0aGVhdDIwMTUkIiwgImxvc3MiLCBzZXA9IiIpKSkpCgptYXAgPC0gbGVhZmxldChkYXRhID0gY291bnR5X3doZWF0X2Ryb3VnaHRoZWF0MjAxNSwgb3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21Db250cm9sID0gRkFMU0UsIHpvb21TbmFwID0gMC4xKSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JQogIAogIGFkZE1pbmlNYXAoCiAgICB0aWxlcyA9IHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaXRlLAogICAgcG9zaXRpb24gPSAndG9wbGVmdCcsIAogICAgd2lkdGggPSAyMDAsIGhlaWdodCA9IDIwMCwKICAgIHRvZ2dsZURpc3BsYXkgPSBGQUxTRSkgJT4lCiAgCiAgCiAgICNhZGRDb250cm9sKHRpdGxlLCBwb3NpdGlvbiA9ICJ0b3BsZWZ0IiwgY2xhc3NOYW1lPSJtYXAtdGl0bGUiKSAlPiUKICAKICAKICBmaXRCb3VuZHMoZXh0ZVsxXSwgZXh0ZVszXSwgZXh0ZVsyXSwgZXh0ZVs0XSkgJT4lIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5wYWwoY291bnR5X3doZWF0X2Ryb3VnaHRoZWF0MjAxNSRsb3NzKSwgIGZpbGxPcGFjaXR5ID0gLjgsIHdlaWdodCA9IDEsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgYWRkUG9seWdvbnMoZGF0YSA9IHN0YXRlcywgZmlsbE9wYWNpdHkgPSAwLCB3ZWlnaHQgPSA0LCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIAogIAogICAgYWRkTGVnZW5kKHBhbCA9IHBhbCwgdmFsdWVzID0gbmEub21pdCh+bG9zcyksIGdyb3VwID0gImNpcmNsZXMiLCB0aXRsZSA9IHBhc3RlKCJXaGVhdCBkcm91Z2h0PGJyPmhlYXQgMjAxNSIsIHNlcCA9ICIiKSwgbmEubGFiZWwgPSAiIiwgcG9zaXRpb24gPSAidG9wcmlnaHQiLCBsYWJGb3JtYXQgPSBsYWJlbEZvcm1hdChwcmVmaXggPSAiJCIpKSAlPiUKCgphZGRMYWJlbE9ubHlNYXJrZXJzKGRhdGEgPSBjb3VudHlfd2hlYXRfZHJvdWdodGhlYXQyMDE1LCBsbmcgPSBsYXRfbG9uZ1ssMV0sIGxhdCA9IGxhdF9sb25nWywyXSwgbGFiZWwgPSBsYXBwbHkobGFicywgSFRNTCksIGxhYmVsT3B0aW9ucyA9IGxhYmVsT3B0aW9ucyhzdHlsZSA9IGxpc3QoImZvbnQtZmFtaWx5IiA9ICJzZXJpZiIpLCBub0hpZGUgPSBUUlVFLCBkaXJlY3Rpb24gPSAnbWlkZGxlJywgdGV4dE9ubHkgPSBUUlVFLCB0ZXh0c2l6ZSA9ICIxOHB4IiwgY29sID0gIndoaXRlIiwgIG9mZnNldCA9IGMoMjAsIDApLCBtYXJrZXJPcHRpb25zKHJpc2VPbkhvdmVyID0gVFJVRSkKKSkgCiAgICAgICAgCmFkZFNjYWxlQmFyKG1hcCwgcG9zaXRpb24gPSBjKCJ0b3ByaWdodCIpLCBvcHRpb25zID0gc2NhbGVCYXJPcHRpb25zKCkpCgoKI21hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQogIyBhZGRMZWdlbmQoY29sb3JzID0gfk5BTUUsIGxhYmVscyA9IH5OQU1FLCB2YWx1ZXMgPSB+TkFNRSwgb3BhY2l0eSA9IDAuNSwgdGl0bGUgPSBOVUxMLAogICMgICAgICAgICAgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiKQoKcGFyKG1hcj1jKDEwLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgpiYXJwbG90KFdIRUFUX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0MjAxNSRsb3NzLCBuYW1lcy5hcmcgPSBXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTUkTkFNRSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCiAgcHRzIDwtIHByZXR0eShXSEVBVF9kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTUkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KFdIRUFUX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0MjAxNSRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCgp0aXRsZShtYWluPSIyMDE1IElQTlcgd2hlYXQgaW5zdXJhbmNlIGxvc3MgZHVlIHRvIGRyb3VnaHQgYW5kIGhlYXRcbmJ5IGNvdW50eSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iQ291bnRpZXMiLCBsaW5lPTcsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9Ikluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NSwgY2V4LmxhYiA9IDEuNCkKCiNpbnRlcmFjdGlvbiBwbG90cyBmb3Igd2hlYXQKCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQpsaWJyYXJ5KGh0bWxUYWJsZSkKCiNwaWUgY2hhcnQgZm9yIDIwMDctMjAxNQoKb3B0aW9ucyhzY2lwZW49OTk5KQoKYWRkTm9BbnN3ZXIgPC0gZnVuY3Rpb24oeCl7CiAgaWYoaXMuZmFjdG9yKHgpKSByZXR1cm4oZmFjdG9yKHgsIGxldmVscz1jKGxldmVscyh4KSwgIk5vIEFuc3dlciIpKSkKICByZXR1cm4oeCkKfQoKIy0tY291bnRzIHdoZWF0IGRyb3VnaHQKCnBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQgPC0gc3Vic2V0KHBhbG91c2VfY291bnRzLCBjb21tb2RpdHkgPT0gIldIRUFUIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkY291bnQsIGxpc3QoIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkbW9udGgsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkeWVhciwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCRkYW1hZ2VjYXVzZSwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCRjb3VudHksIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkc3RhdGUpLCBGVU4gPSAic3VtIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfeWVhciA8LSBhZ2dyZWdhdGUocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCRjb3VudCwgbGlzdChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JHllYXIsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkZGFtYWdlY2F1c2UsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkY291bnR5LCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JHN0YXRlKSwgRlVOID0gInN1bSIpCgpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X3llYXJfbm9jb3VudHkgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkY291bnQsIGxpc3QocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCR5ZWFyLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGRhbWFnZWNhdXNlLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JHN0YXRlKSwgRlVOID0gInN1bSIpCgpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50KSA8LSBjKCJtb250aCIsICJ5ZWFyIiwgImRhbWFnZWNhdXNlIiwgImNvdW50eSIsICJzdGF0ZSIsICJjb3VudCIpCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfeWVhcikgPC0gYygieWVhciIsICJkYW1hZ2VjYXVzZSIsICJjb3VudHkiLCAic3RhdGUiLCAiY291bnQiKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X3llYXJfbm9jb3VudHkpIDwtIGMoInllYXIiLCAiZGFtYWdlY2F1c2UiLCAic3RhdGUiLCAiY291bnQiKQoKIy0tbG9zcwoKcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdF9sb3NzIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3MsIGNvbW1vZGl0eSA9PSAiV0hFQVQiKQoKcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzIDwtIGFnZ3JlZ2F0ZShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3MkbG9zcywgbGlzdCggcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdF9sb3NzJG1vbnRoLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3MkeWVhciwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdF9sb3NzJGRhbWFnZWNhdXNlLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3MkY291bnR5LCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3Mkc3RhdGUpLCBGVU4gPSAic3VtIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc195ZWFyIDwtIGFnZ3JlZ2F0ZShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3MkbG9zcywgbGlzdChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3MkeWVhciwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdF9sb3NzJGRhbWFnZWNhdXNlLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3MkY291bnR5LCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0X2xvc3Mkc3RhdGUpLCBGVU4gPSAic3VtIikKCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zcykgPC0gYygibW9udGgiLCAieWVhciIsICJkYW1hZ2VjYXVzZSIsICJjb3VudHkiLCAic3RhdGUiLCAibG9zcyIpCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfbG9zc195ZWFyKSA8LSBjKCJ5ZWFyIiwgImRhbWFnZWNhdXNlIiwgImNvdW50eSIsICJzdGF0ZSIsICJsb3NzIikKCgoKCgoKI3BhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfY291bnR5IDwtIGFnZ3JlZ2F0ZShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX3doZWF0JGxvc3MsIGxpc3QoIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkZGFtYWdlY2F1c2UsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfd2hlYXQkeWVhciwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV93aGVhdCRjb3VudHkgKSwgRlVOID0gImxlbmd0aCIpCgojY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCkgPC0gYygiZGFtYWdlY2F1c2UiLCAieWVhciIsICJsb3NzIikKCiNjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X2NvdW50eSkgPC0gYygiZGFtYWdlY2F1c2UiLCAieWVhciIsICJjb3VudHkiLCAibG9zcyIpCgoKIy1ib3hwbG90cyBvZiBjb3VudCBkYXRhIGZvciBhbGwgY29tbW9kaXRpZXMgYW5kIGFsbCBkYW1hZ2UgY2F1c2VzLSAxOTg5LTIwMTUKCiNwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X2NvbW1vZGl0eSA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCwgbG9zcyA+IDIwKQojcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF9jb21tb2RpdHkgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfY29tbW9kaXR5LCBjb21tb2RpdHkgIT0gIkFESlVTVEVEIEdST1NTIFJFVkVOVUUiKQojcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRkYW1hZ2VjYXVzZSkKCiNwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X2NvbW1vZGl0eSRjb21tb2RpdHkgPC0gZmFjdG9yKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfY29tbW9kaXR5JGNvbW1vZGl0eSkKCgojcGFyKG1hcj1jKDguOCwgNi4xLCAyLjEsIDIuMSksIG1ncD1jKDMsIDEsIDApLCBsYXM9MCkKCgoKcHNjX2Ryb3VnaHQgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfeWVhciwgZGFtYWdlY2F1c2UgPT0gIkRyb3VnaHQiKQoKIy0tY3JlYXRlIG1pc3NpbmcgY291bnR5IHllYXIgZGF0YSB3aGVyZSBubyB2YWx1ZXMgYXJlIGZvdW5kCmQxIDwtIGRhdGEuZnJhbWUodW5pcXVlKHBhbG91c2VfY291bnRzJGNvdW50eSkpCmNvbG5hbWVzKGQxKSA8LSAiY291bnR5IgoKZDIgPC0gZGF0YS5mcmFtZSh1bmlxdWUocGFsb3VzZV9jb3VudHMkeWVhcikpCmNvbG5hbWVzKGQyKSA8LSAieWVhciIKZDIgPC0gZDJbb3JkZXIoZDIkeWVhciksXQpkMiA8LSBkYXRhLmZyYW1lKGQyKQpjb2xuYW1lcyhkMikgPC0gInllYXIiCgpkMmEgPC0gYygiV0EiLCAiV0EiLCAiV0EiLCAiV0EiLCAiV0EiLCAiV0EiLCAiT1IiLCAiT1IiLCAiV0EiLCAiSUQiLCAiSUQiLCAiSUQiLCAiSUQiLCAiSUQiLCAiSUQiLCAiV0EiLCAiT1IiLCAiT1IiLCAiT1IiLCAiT1IiLCAiT1IiLCAiT1IiLCAiV0EiLCAiV0EiLCAiSUQiLCAiV0EiKQoKZDJhIDwtIGRhdGEuZnJhbWUoZDJhKQpjb2xuYW1lcyhkMmEpIDwtICJzdGF0ZSIKCmQxIDwtIGRhdGEuZnJhbWUoZDFbcmVwKHNlcV9sZW4obnJvdyhkMSkpLCBlYWNoPTI3KSxdKQpkMiA8LSBkby5jYWxsKCJyYmluZCIsIHJlcGxpY2F0ZSgyNiwgZDIsIHNpbXBsaWZ5ID0gRkFMU0UpKQpkMmEgPC0gZGF0YS5mcmFtZShkMmFbcmVwKHNlcV9sZW4obnJvdyhkMmEpKSwgZWFjaD0yNyksXSkKCmQzIDwtIGNiaW5kKGQxLCBkMmEsIGQyKQpjb2xuYW1lcyhkMykgPC0gYygiY291bnR5IiwgInN0YXRlIiwgInllYXIiKQoKcHNjX2Ryb3VnaHQyIDwtIG1lcmdlKGQzLCBwc2NfZHJvdWdodCwgYnkgPSBjKCJ5ZWFyIiwgImNvdW50eSIpLCBhbGwgPSBUUlVFKQpwc2NfZHJvdWdodDIkY291bnRbaXMubmEocHNjX2Ryb3VnaHQyJGNvdW50KV0gPC0gMAoKcHNjX2Ryb3VnaHQyIDwtIHN1YnNldChwc2NfZHJvdWdodDIsIHllYXIgPj0gMjAwMSkKCnBzY19kcm91Z2h0MiRjb3VudHlzdGF0ZSA8LSBwYXN0ZShwc2NfZHJvdWdodDIkY291bnR5LCBwc2NfZHJvdWdodDIkc3RhdGUueCwgc2VwPSIsICIpCgojZmlndXJlIG91dCB3aGljaCBjb3VudGllcyBoYXZlIGFsbCB6ZXJvcyBhbmQgZWxpbWluYXRlCnBzY19kcm91Z2h0MmEgPC0gYWdncmVnYXRlKHBzY19kcm91Z2h0MiRjb3VudCwgYnkgPSBsaXN0KHBzY19kcm91Z2h0MiRjb3VudHlzdGF0ZSksIEZVTiA9ICJzdW0iKQoKcGFyKG1hcj1jKDcsNiw0LDIpKzAuMSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNSwxLDApKQppbnRlcmFjdGlvbi5wbG90KHguZmFjdG9yICAgICA9IHBzY19kcm91Z2h0MiR5ZWFyLAogICAgICAgICAgICAgICAgIHRyYWNlLmZhY3RvciA9IHBzY19kcm91Z2h0MiRjb3VudHlzdGF0ZSwgCiAgICAgICAgICAgICAgICAgcmVzcG9uc2UgICAgID0gcHNjX2Ryb3VnaHQyJGNvdW50LCAKICAgICAgICAgICAgICAgICBmdW4gPSBzdW0sCiAgICAgICAgICAgICAgICAgbGFzID0gMiwKICAgICAgICAgICAgICAgICB0eXBlPSJsIiwKICAgICAgICAgICAgICAgICBjb2w9YygiYmxhY2siLCJyZWQxIiwiZ3JlZW4xIiwgImJsdWUxIiwgInllbGxvdzEiLCAicmVkMiIsImdyZWVuMiIsICJibHVlMiIsICJ5ZWxsb3cyIiwicmVkMyIsImdyZWVuMyIsICJibHVlMyIsICJ5ZWxsb3czIiwicmVkNCIsImdyZWVuNCIsICJibHVlNCIsICJ5ZWxsb3c0IiksICAjIyMgQ29sb3JzIGZvciBsZXZlbHMgb2YgdHJhY2UgdmFyLgogICAgICAgICAgICAgICAgICNwY2g9YygxOSwgMTcsIDE1KSwgICAgICAgICAgICAgIyMjIFN5bWJvbHMgZm9yIGxldmVscyBvZiB0cmFjZSB2YXIuCiAgICAgICAgICAgICAgICAgZml4ZWQ9RkFMU0UsICAgICAgICAgICAgICAgICAgICAjIyMgT3JkZXIgYnkgZmFjdG9yIG9yZGVyIGluIGRhdGEKICAgICAgICAgICAgICAgICBsZWcuYnR5ID0gIm4iLAogICAgICAgICAgICAgICAgICN5YXh0ID0gJ24nLAogICAgICAgICAgICAgICAgICN4YXh0ID0gJ24nLAogICAgICAgICAgICAgICAgIHlsYWI9IiIsCiAgICAgICAgICAgICAgICAgbGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgeGxhYj0nJykKICAgICAgICAgICAgICAgICAjbWFpbj0iQW5udWFsIFdoZWF0IEluc3VyYW5jZSBDbGFpbSBGcmVxdWVuY3kgXG4gYnkgY291bnR5IGZvciB0aGUgSVBOVyBTdHVkeSBBcmVhLCAyMDAxLTIwMTU6IERST1VHSFQiLCBsYXMgPSAyKQoKdGl0bGUobWFpbj0iQW5udWFsIElQTlcgV2hlYXQgSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSBieSBjb3VudHlcbjIwMDEtMjAxNTogRHJvdWdodCIsIGFkaiA9IDAsIGNleC5tYWluID0gMS45KQp0aXRsZSh4bGFiPSJZZWFycyIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iV2hlYXQgQ2xhaW0gRnJlcXVlbmN5OiBEcm91Z2h0IiwgbGluZT0zLjUsIGNleC5sYWIgPSAxLjQpCnB0cyA8LSBwcmV0dHkocHNjX2Ryb3VnaHQkY291bnQpCnB0czIgPC0gYyh1bmlxdWUocHNjX2Ryb3VnaHQkeWVhcikpCnB0czIgPC0gYXMubnVtZXJpYyhwdHMyKQoKI2F4aXMoMiwgbGFzID0gMSwgY2V4LmF4aXMgPSAxLjQsIGF0ID0gcHRzLCBsYWJlbHMgPSBwYXN0ZShwdHMsIHNlcCA9ICIiKSkKI2F4aXMoMSwgbGFzID0gMiwgY2V4LmF4aXMgPSAxLjksIGF0ID0gcHRzMiwgbGFiZWxzID0gcHRzMikKCiNwc2NfZHJvdWdodCA8LSBzdWJzZXQocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyLCBkYW1hZ2VjYXVzZSA9PSAiRHJvdWdodCIpCgpwc2NfZHJvdWdodF9hbGwgPC0gYWdncmVnYXRlKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfeWVhciRjb3VudCwgYnkgPSBsaXN0KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnRfeWVhciRzdGF0ZSwgcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyJGNvdW50eSwgcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyJHllYXIpLCBGVU4gPSAic3VtIikKCmNvbG5hbWVzKHBzY19kcm91Z2h0X2FsbCkgPC0gYygic3RhdGUiLCAiY291bnR5IiwgInllYXIiLCAiY291bnQiKQoKIy0tY3JlYXRlIG1pc3NpbmcgY291bnR5IHllYXIgZGF0YSB3aGVyZSBubyB2YWx1ZXMgYXJlIGZvdW5kCmQxIDwtIGRhdGEuZnJhbWUodW5pcXVlKHBhbG91c2VfY291bnRzJGNvdW50eSkpCmNvbG5hbWVzKGQxKSA8LSAiY291bnR5IgoKZDIgPC0gZGF0YS5mcmFtZSh1bmlxdWUocGFsb3VzZV9jb3VudHMkeWVhcikpCmNvbG5hbWVzKGQyKSA8LSAieWVhciIKZDIgPC0gZDJbb3JkZXIoZDIkeWVhciksXQpkMiA8LSBkYXRhLmZyYW1lKGQyKQpjb2xuYW1lcyhkMikgPC0gInllYXIiCgoKZDJhIDwtIGMoIldBIiwgIldBIiwgIldBIiwgIldBIiwgIldBIiwgIldBIiwgIk9SIiwgIk9SIiwgIldBIiwgIklEIiwgIklEIiwgIklEIiwgIklEIiwgIklEIiwgIklEIiwgIldBIiwgIk9SIiwgIk9SIiwgIk9SIiwgIk9SIiwgIk9SIiwgIk9SIiwgIldBIiwgIldBIiwgIklEIiwgIldBIikKCmQyYSA8LSBkYXRhLmZyYW1lKGQyYSkKY29sbmFtZXMoZDJhKSA8LSAic3RhdGUiCgpkMSA8LSBkYXRhLmZyYW1lKGQxW3JlcChzZXFfbGVuKG5yb3coZDEpKSwgZWFjaD0yNyksXSkKZDIgPC0gZG8uY2FsbCgicmJpbmQiLCByZXBsaWNhdGUoMjYsIGQyLCBzaW1wbGlmeSA9IEZBTFNFKSkKZDJhIDwtIGRhdGEuZnJhbWUoZDJhW3JlcChzZXFfbGVuKG5yb3coZDJhKSksIGVhY2g9MjcpLF0pCgoKCmQzIDwtIGNiaW5kKGQxLCBkMmEsIGQyKQpjb2xuYW1lcyhkMykgPC0gYygiY291bnR5IiwgInN0YXRlIiwgInllYXIiKQoKcHNjX2Ryb3VnaHQzIDwtIG1lcmdlKGQzLCBwc2NfZHJvdWdodF9hbGwsIGJ5ID0gYygieWVhciIsICJjb3VudHkiKSwgYWxsID0gVFJVRSkKcHNjX2Ryb3VnaHQzJGNvdW50W2lzLm5hKHBzY19kcm91Z2h0MyRjb3VudCldIDwtIDAKCnBzY19kcm91Z2h0MyA8LSBzdWJzZXQocHNjX2Ryb3VnaHQzLCB5ZWFyID49IDIwMDEpCgpwc2NfZHJvdWdodDMkY291bnR5c3RhdGUgPC0gcGFzdGUocHNjX2Ryb3VnaHQzJGNvdW50eSwgcHNjX2Ryb3VnaHQzJHN0YXRlLngsIHNlcD0iLCAiKQoKCiNwYXIobWFyPWMoNyw2LDQsMikrMC4xLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3A9Yyg1LDEsMCkpCgoKaW50ZXJhY3Rpb24ucGxvdCh4LmZhY3RvciAgICAgPSBwc2NfZHJvdWdodDMkeWVhciwKICAgICAgICAgICAgICAgICB0cmFjZS5mYWN0b3IgPSBwc2NfZHJvdWdodDMkY291bnR5c3RhdGUsIAogICAgICAgICAgICAgICAgIHJlc3BvbnNlICAgICA9IHBzY19kcm91Z2h0MyRjb3VudCwgCiAgICAgICAgICAgICAgICAgZnVuID0gc3VtLAogICAgICAgICAgICAgICAgIGxhcyA9IDIsCiAgICAgICAgICAgICAgICAgdHlwZT0ibCIsCiAgICAgICAgICAgICAgICAgY29sPWMoImJsYWNrIiwicmVkMSIsImdyZWVuMSIsICJibHVlMSIsICJ5ZWxsb3cxIiwgInJlZDIiLCJncmVlbjIiLCAiYmx1ZTIiLCAieWVsbG93MiIsInJlZDMiLCJncmVlbjMiLCAiYmx1ZTMiLCAieWVsbG93MyIsInJlZDQiLCJncmVlbjQiLCAiYmx1ZTQiLCAieWVsbG93NCIpLCAgIyMjIENvbG9ycyBmb3IgbGV2ZWxzIG9mIHRyYWNlIHZhci4KICAgICAgICAgICAgICAgICAjcGNoPWMoMTksIDE3LCAxNSksICAgICAgICAgICAgICMjIyBTeW1ib2xzIGZvciBsZXZlbHMgb2YgdHJhY2UgdmFyLgogICAgICAgICAgICAgICAgIGZpeGVkPUZBTFNFLCAgICAgICAgICAgICAgICAgICAgIyMjIE9yZGVyIGJ5IGZhY3RvciBvcmRlciBpbiBkYXRhCiAgICAgICAgICAgICAgICAgbGVnLmJ0eSA9ICJuIiwKICAgICAgICAgICAgICAgICB5bGFiPSIiLAogICAgICAgICAgICAgICAgIGxlZ2VuZCA9IEZBTFNFLAogICAgICAgICAgICAgICAgIHhsYWI9IiIpCiAgICAgICAgICAgICAgICAgI21haW49IkFubnVhbCBXaGVhdCBJbnN1cmFuY2UgQ2xhaW0gRnJlcXVlbmN5IFxuIGJ5IGNvdW50eSBmb3IgdGhlIElQTlcgU3R1ZHkgQXJlYSwgMjAwMS0yMDE1OiBBTEwgREFNQUdFIENBVVNFUyIsIGxhcyA9IDIpCgp0aXRsZShtYWluPSJBbm51YWwgSVBOVyBXaGVhdCBJbnN1cmFuY2UgQ2xhaW0gRnJlcXVlbmN5IGJ5IGNvdW50eVxuMjAwMS0yMDE1OiBBbGwgRGFtYWdlIENhdXNlcyIsIGFkaiA9IDAsIGNleC5tYWluID0gMS45KQp0aXRsZSh4bGFiPSJZZWFycyIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iV2hlYXQgQ2xhaW0gRnJlcXVlbmN5OiBBbGwgRGFtYWdlIENhdXNlcyIsIGxpbmU9My41LCBjZXgubGFiID0gMS40KQoKCgojYm94cGxvdChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfeWVhciRsb3NzIH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9sb3NzX3llYXIkeWVhciwgeWxhYiA9ICJJbnN1cmFuY2UgQ2xhaW0gRnJlcXVlbmN5IiwgeGxhYiA9ICIiLCBuYW1lcy5hcmcgPSBwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2xvc3NfeWVhciR5ZWFyLCBsYXMgPSAzLCBtYWluID0gIklQTlcgV2hlYXQgSW5zdXJhbmNlIExvc3MgRnJlcXVlbmNpZXMvWWVhciAxOTg5LTIwMTUiKQoKI3RpdGxlKHhsYWI9IlllYXIiLCBsaW5lPTcpCgoKI2JveHBsb3QocGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyX25vY291bnR5JGNvdW50IH4gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyX25vY291bnR5JHllYXIsIHlsYWIgPSAiSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSIsIHhsYWIgPSAiIiwgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudF95ZWFyX25vY291bnR5JHllYXIsIGxhcyA9IDMsIG1haW4gPSAiSVBOVyBXaGVhdCBJbnN1cmFuY2UgTG9zcyBGcmVxdWVuY2llcy9ZZWFyIDE5ODktMjAxNSIpCgojdGl0bGUoeGxhYj0iRGFtYWdlIENhdXNlIiwgbGluZT03KQoKCiNwbG90KHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkbG9zcyB+IHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTVfY291bnQkZGFtYWdlY2F1c2UsIHlsYWIgPSAiSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSIsIHhsYWIgPSAiIiwgbmFtZXMuYXJnID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCRkYW1hZ2VjYXVzZSwgbGFzID0gMywgbWFpbiA9ICJJUE5XIFdoZWF0IEluc3VyYW5jZSBMb3NzIEZyZXF1ZW5jaWVzL1llYXIgMTk4OS0yMDE1IikKCiN0aXRsZSh4bGFiPSJEYW1hZ2UgQ2F1c2UiLCBsaW5lPTcpCgoKI3BzY19kcm91Z2h0IDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1X2NvdW50X2NvdW50eSwgZGFtYWdlY2F1c2UgPT0gIkRyb3VnaHQiKQoKCiNiYXJwbG90KHBzY19kcm91Z2h0JGxvc3MsIHlsYWIgPSAiSW5zdXJhbmNlIENsYWltIEZyZXF1ZW5jeSIsIHhsYWIgPSAiIiwgbmFtZXMuYXJnID0gcHNjX2Ryb3VnaHQkeWVhciwgbGFzID0gMywgbWFpbiA9ICJJUE5XIFdoZWF0IEluc3VyYW5jZSBMb3NzIEZyZXF1ZW5jaWVzL1llYXIgMTk4OS0yMDE1IikKCiN0aXRsZSh4bGFiPSJEYW1hZ2UgQ2F1c2UiLCBsaW5lPTcpCgojbW9kZWxfY291bnQgPC0gZ2xtKGZvcm11bGEgPSBsb2cobG9zcykgfiBkYW1hZ2VjYXVzZSArIGNvbW1vZGl0eSwgZmFtaWx5ID0gInBvaXNzb24iLCBkYXRhID0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNV9jb3VudCkKCmBgYAoKCjxicj48L2JyPgoKIVtdKGh0dHBzOi8vZG1pbmUuaW8vd2FmL2ltZy9TdGVwMS5wbmcpCgo8YnI+PC9icj4KPGRpdiBhbGlnbj0ibGVmdCI+CgojIyBTVEVQIDExOiBDSEVSUklFUywgMjAwMS0yMDE1IGZvciB0aGUgSVBOVwoKPGRpdiBhbGlnbj0iY2VudGVyIj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVycm9yPVRSVUUsIGVjaG89RkFMU0UsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gN30KCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGdyaWRFeHRyYSkKCiNwaWUgY2hhcnQgZm9yIDIwMDctMjAxNQoKb3B0aW9ucyhzY2lwZW49OTk5KQoKYWRkTm9BbnN3ZXIgPC0gZnVuY3Rpb24oeCl7CiAgaWYoaXMuZmFjdG9yKHgpKSByZXR1cm4oZmFjdG9yKHgsIGxldmVscz1jKGxldmVscyh4KSwgIk5vIEFuc3dlciIpKSkKICByZXR1cm4oeCkKfQoKQ0hFUlJJRVMgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUsIGNvbW1vZGl0eSA9PSAiQ0hFUlJJRVMiKQpwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1IDwtIGFnZ3JlZ2F0ZShDSEVSUklFUyRsb3NzLCBsaXN0KENIRVJSSUVTJGRhbWFnZWNhdXNlKSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQoKcGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGUgPC0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNVtvcmRlcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1JGxvc3MpLF0gClggPC0gcGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGVbb3JkZXIocGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGUkbG9zcyksXSAKI2NvbG5hbWVzKFgpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQpzdW1tYXJ5X2RhdGFzZXQgPC0gWCAlPiUgZmlsdGVyKGxvc3MgPCAxMDAwMDAwKSAKc3VtbWFyeV9kYXRhc2V0MiA8LSBYICU+JSBmaWx0ZXIobG9zcyA+IDEwMDAwMDApIApjb2xuYW1lcyhzdW1tYXJ5X2RhdGFzZXQpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQpZIDwtIHN1bShzdW1tYXJ5X2RhdGFzZXQkbG9zcykKWVkgPC0gYygiT3RoZXIiLCBZKQpZWSA8LSBkYXRhLmZyYW1lKHQoWVkpKQpjb2xuYW1lcyhZWSkgPC0gYygiZGFtYWdlY2F1c2UiLCAibG9zcyIpCllZWSA8LSByYmluZChzdW1tYXJ5X2RhdGFzZXQyLCBZWSkKI2ZhY3RvcihZWVkpCgpZWVkgPC0gYXMuZGF0YS5mcmFtZShsYXBwbHkoWVlZLCBhZGROb0Fuc3dlcikpCllZWSRsb3NzIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKFlZWSRsb3NzKSkKWVlZMTwtIFlZWVtvcmRlcihZWVkkbG9zcyksXSAKWVlZMSA8LSBZWVkxWyBucm93KFlZWTEpOjEsIF0KCgpwIDwtIHBsb3RfbHkoWVlZLCBsYWJlbHMgPSB+ZGFtYWdlY2F1c2UsIHZhbHVlcyA9IH5sb3NzLCB0eXBlID0gJ3BpZScsCiAgICAgICAgICAgICB0ZXh0cG9zaXRpb24gPSAnaW5zaWRlJywKICAgICAgICAgICAgIHRleHRpbmZvID0gJ2xhYmVsK3BlcmNlbnQnLAogICAgICAgICAgICAgaW5zaWRldGV4dGZvbnQgPSBsaXN0KGNvbG9yID0gJyNGRkZGRkYnKSwKICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywKICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJyQnLCBsb3NzLCAnIGJpbGxpb25zJyksCiAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KGNvbG9ycyA9IGNvbG9ycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpc3QoY29sb3IgPSAnI0ZGRkZGRicsIHdpZHRoID0gMSkpLAogICAgICAgICAgICAgI1RoZSAncHVsbCcgYXR0cmlidXRlIGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIHNwYWNlIGJldHdlZW4gdGhlIHNlY3RvcnMKICAgICAgICAgICAgIHNob3dsZWdlbmQgPSBUUlVFKSAlPiUKICBsYXlvdXQodGl0bGUgPSAnVG9wIERhbWFnZSBDYXVzZXMgZm9yIENIRVJSSUVTLCBQYWxvdXNlIFJlZ2lvbjogMTk4OS0yMDE1JywKICAgICAgICAgeGF4aXMgPSBsaXN0KHNob3dncmlkID0gRkFMU0UsIHplcm9saW5lID0gRkFMU0UsIHNob3d0aWNrbGFiZWxzID0gRkFMU0UpLAogICAgICAgICB5YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwgemVyb2xpbmUgPSBGQUxTRSwgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSkpCgoKCgojcAoKWVlZMiA8LSBZWVkxCmxldmVscyhZWVkyJGRhbWFnZWNhdXNlKVs4XSA8LSAiRXhjZXNzaXZlIE1vaXN0dXJlIgoKWVlZMiRsb3NzIDwtIHJvdW5kKFlZWTIkbG9zcywgZGlnaXRzID0gMCkKWVlZMiRsb3NzIDwtIGZvcm1hdChZWVkyJGxvc3MsYmlnLm1hcms9IiwiLHNjaWVudGlmaWM9RkFMU0UpCllZWTIkbG9zcyA8LSBwYXN0ZSgiJCIsIFlZWTIkbG9zcywgc2VwPSIiKQpZWVkyJGxvc3MgPC0gZ3N1YigiICIsICIiLCBZWVkyJGxvc3MsIGZpeGVkID0gVFJVRSkKCgojLS15ZWFyCnBhbG91c2Vfc3VtbG9zc195ZWFyIDwtIGFnZ3JlZ2F0ZShDSEVSUklFUyRsb3NzLCBsaXN0KENIRVJSSUVTJHllYXIpLCBGVU4gPSAic3VtIikKY29sbmFtZXMocGFsb3VzZV9zdW1sb3NzX3llYXIpIDwtIGMoInllYXIiLCAibG9zcyIpCgojLS1jb3VudHkKCnBhbG91c2Vfc3VtbG9zc19jb3VudHkgPC0gYWdncmVnYXRlKENIRVJSSUVTJGxvc3MsIGxpc3QoQ0hFUlJJRVMkY291bnR5KSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc19jb3VudHkpIDwtIGMoImNvdW50eSIsICJsb3NzIikKCnBhcihtYXI9YygxMi41LCA2LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDQsIDEsIDApLCBsYXM9MCkKYmFycGxvdChwYWxvdXNlX3N1bWxvc3NfY291bnR5JGxvc3MsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc19jb3VudHkkY291bnR5LCBjZXgubmFtZXMgPSAxLjQsIGxhcyA9IDMsIHlheHQ9Im4iLCAgY29sID0gImxpZ2h0Ymx1ZSIpCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2NvdW50eSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2NvdW50eSRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCgojbXRleHQodGV4dCA9ICJEYW1hZ2UgQ2F1c2UiLAojICAgICAgc2lkZSA9IDEsI3NpZGUgMSA9IGJvdHRvbQojICAgICAgbGluZSA9IDgpCgp0aXRsZShtYWluPSJJUE5XIGNoZXJyaWVzIGluc3VyYW5jZSBsb3NzIGJ5IGNvbW1vZGl0eTogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJDb3VudGllcyIsIGxpbmU9OCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iSW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKcGFyKG1hcj1jKDEyLjUsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQpiYXJwbG90KHBhbG91c2Vfc3VtbG9zc195ZWFyJGxvc3MsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc195ZWFyJHllYXIsIGNleC5uYW1lcyA9IDEuNCwgbGFzID0gMywgeWF4dD0ibiIsICBjb2wgPSAibGlnaHRibHVlIikKcHRzIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfeWVhciRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX3llYXIkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKI210ZXh0KHRleHQgPSAiWWVhcnMiLAojICAgICAgc2lkZSA9IDEsI3NpZGUgMSA9IGJvdHRvbQojICAgICAgbGluZSA9IDgpCgp0aXRsZShtYWluPSJJUE5XIGNoZXJyaWVzIGluc3VyYW5jZSBsb3NzIGJ5IHllYXI6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTgsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9Ikluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCgoKcGFyKG1hcj1jKDEyLjgsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gInNlcmlmIiwgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQpsZXZlbHMoWVlZMSRkYW1hZ2VjYXVzZSlbOF0gPC0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIKbGV2ZWxzKFlZWTEkZGFtYWdlY2F1c2UpWzI0XSA8LSAiU25vdy9MaWdodG5pbmciCgoKYmFycGxvdChZWVkxJGxvc3MsIG5hbWVzLmFyZyA9IFlZWTEkZGFtYWdlY2F1c2UsIGxhcyA9IDMsIGNleC5uYW1lcyA9IDEuNCwgeWF4dD0ibiIsIGNvbCA9ICJsaWdodGJsdWUiKQpwdHMgPC0gcHJldHR5KFlZWSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoWVlZJGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKCnRpdGxlKG1haW49IklQTlcgY2hlcnJpZXMgaW5zdXJhbmNlIGxvc3MgYnkgZGFtYWdlIGNhdXNlOiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCnRpdGxlKHhsYWI9IkRhbWFnZSBDYXVzZSIsIGxpbmU9MTEuNSwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iQ2hlcnJpZXMgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT01LCBjZXgubGFiID0gMS40KQoKCiNtdGV4dCh0ZXh0ID0gIkRhbWFnZSBDYXVzZSIsCiMgICAgICBzaWRlID0gMSwjc2lkZSAxID0gYm90dG9tCiMgICAgICBsaW5lID0gMTApCgpodG1sVGFibGUoWVlZMiwKICAgICAgICAgIGNncm91cCA9IGMoIjIwMDEtMjAxNSIpLAogICAgICAgICAgY2FwdGlvbiA9ICJJUE5XIHJlZ2lvbiBDSEVSUklFUyB0b3RhbCBpbnN1cmFuY2UgbG9zcyBieSBkYW1hZ2UgY2F1c2UsIDIwMDEtMjAxNSIsCiAgICAgICAgICBhbGlnbiA9ICJjIiwKICAgICAgICAgIHJuYW1lcyA9IEZBTFNFLAogICAgICAgICAgY3NzLmNlbGwgPSAicGFkZGluZy1sZWZ0OiAuNWVtOyBwYWRkaW5nLXJpZ2h0OiAuNWVtOyIpCgpgYGAKCgo8ZGl2IGFsaWduPSJjZW50ZXIiPgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXJyb3I9VFJVRSwgZWNobz1GQUxTRSwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA3fQoKbGlicmFyeShSQ29sb3JCcmV3ZXIpCgoKQ0hFUlJJRVMgPC0gc3Vic2V0KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGUsIGNvbW1vZGl0eSA9PSAiQ0hFUlJJRVMiKQoKbGV2ZWxzKENIRVJSSUVTJGRhbWFnZWNhdXNlKVs4XSA8LSAiRXhjZXNzaXZlIE1vaXN0dXJlIgpDSEVSUklFUyRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IoQ0hFUlJJRVMkZGFtYWdlY2F1c2UpCgoKCkNIRVJSSUVTX2RhbWFnZSA8LSBzdWJzZXQoQ0hFUlJJRVMsIGRhbWFnZWNhdXNlID09IkV4Y2Vzc2l2ZSBNb2lzdHVyZSIgfCBkYW1hZ2VjYXVzZSA9PSAiRnJlZXplIiB8IGRhbWFnZWNhdXNlID09ICJGcm9zdCIgfCBkYW1hZ2VjYXVzZSA9PSAiQ29sZCBXZXQgV2VhdGhlciIgfCBkYW1hZ2VjYXVzZSA9PSAiSGFpbCIgfCBkYW1hZ2VjYXVzZSA9PSAiRGVjbGluZSBpbiBQcmljZSIgfCBkYW1hZ2VjYXVzZSA9PSAiSGVhdCIgfCBkYW1hZ2VjYXVzZSA9PSAiV2luZC9FeGNlc3MgV2luZCIpCgpDSEVSUklFU19kYW1hZ2UkZGFtYWdlY2F1c2UgPC0gZmFjdG9yKENIRVJSSUVTX2RhbWFnZSRkYW1hZ2VjYXVzZSkgCgoKQ0hFUlJJRVNfZGFtYWdlX3RvcCA8LSBzdWJzZXQoQ0hFUlJJRVNfZGFtYWdlLCBkYW1hZ2VjYXVzZSA9PSAiRXhjZXNzaXZlIE1vaXN0dXJlIiB8IGRhbWFnZWNhdXNlID09ICJGcmVlemUiICB8IGRhbWFnZWNhdXNlID09ICJGcm9zdCIpCgpDSEVSUklFU19kYW1hZ2VfdG9wJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihDSEVSUklFU19kYW1hZ2VfdG9wJGRhbWFnZWNhdXNlLCBsZXZlbHMgPSBjKCJGcmVlemUiLCAiRnJvc3QiLCAiRXhjZXNzaXZlIE1vaXN0dXJlIikpCgoKCkNIRVJSSUVTX21vaXN0dXJlZnJvc3RmcmVlemUgPC0gc3Vic2V0KENIRVJSSUVTX2RhbWFnZSwgZGFtYWdlY2F1c2UgPT0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIgfCBkYW1hZ2VjYXVzZSA9PSAiRnJvc3QiIHwgZGFtYWdlY2F1c2UgPT0gIkZyZWV6ZSIpCkNIRVJSSUVTX21vaXN0dXJlZnJvc3RmcmVlemUyMDEzIDwtIHN1YnNldChDSEVSUklFU19tb2lzdHVyZWZyb3N0ZnJlZXplLCB5ZWFyID09IDIwMTMpCkNIRVJSSUVTX21vaXN0dXJlZnJvc3RmcmVlemUyMDE1IDwtIHN1YnNldChDSEVSUklFU19tb2lzdHVyZWZyb3N0ZnJlZXplLCB5ZWFyID09IDIwMTUpCgoKCgoKQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZSA8LSBhZ2dyZWdhdGUoQ0hFUlJJRVNfbW9pc3R1cmVmcm9zdGZyZWV6ZSRsb3NzLCBieSA9IGxpc3QoQ0hFUlJJRVNfbW9pc3R1cmVmcm9zdGZyZWV6ZSRjb3VudHkpLCBGVU4gPSAic3VtIikKCmNvbG5hbWVzKENIRVJSSUVTX2RhbWFnZV90b3BfYWdnX21vaXN0dXJlZnJvc3RmcmVlemUpIDwtIGMoIk5BTUUiLCAibG9zcyIpCgoKQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTMgPC0gYWdncmVnYXRlKENIRVJSSUVTX21vaXN0dXJlZnJvc3RmcmVlemUyMDEzJGxvc3MsIGJ5ID0gbGlzdChDSEVSUklFU19tb2lzdHVyZWZyb3N0ZnJlZXplMjAxMyRjb3VudHkpLCBGVU4gPSAic3VtIikKCmNvbG5hbWVzKENIRVJSSUVTX2RhbWFnZV90b3BfYWdnX21vaXN0dXJlZnJvc3RmcmVlemUyMDEzKSA8LSBjKCJOQU1FIiwgImxvc3MiKQoKQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTUgPC0gYWdncmVnYXRlKENIRVJSSUVTX21vaXN0dXJlZnJvc3RmcmVlemUyMDE1JGxvc3MsIGJ5ID0gbGlzdChDSEVSUklFU19tb2lzdHVyZWZyb3N0ZnJlZXplMjAxNSRjb3VudHkpLCBGVU4gPSAic3VtIikKCmNvbG5hbWVzKENIRVJSSUVTX2RhbWFnZV90b3BfYWdnX21vaXN0dXJlZnJvc3RmcmVlemUyMDE1KSA8LSBjKCJOQU1FIiwgImxvc3MiKQoKI0NIRVJSSUVTX2RhbWFnZV90b3BfYWdnX21vaXN0dXJlZnJvc3RmcmVlemVbaXMubmEoQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZSldIDwtIDAKCgpjb3VudHlfY2hlcnJpZXNfbW9pc3R1cmVmcm9zdGZyZWV6ZSA8LSBtZXJnZShjb3VudGllcywgQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZSwgYnkgPSAiTkFNRSIpCgpjb3VudHlfY2hlcnJpZXNfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTMgPC0gbWVyZ2UoY291bnRpZXMsIENIRVJSSUVTX2RhbWFnZV90b3BfYWdnX21vaXN0dXJlZnJvc3RmcmVlemUyMDEzLCBieSA9ICJOQU1FIikKY291bnR5X2NoZXJyaWVzX21vaXN0dXJlZnJvc3RmcmVlemUyMDE1IDwtIG1lcmdlKGNvdW50aWVzLCBDSEVSUklFU19kYW1hZ2VfdG9wX2FnZ19tb2lzdHVyZWZyb3N0ZnJlZXplMjAxNSwgYnkgPSAiTkFNRSIpCgoKI2dncGxvdChDSEVSUklFU19kYW1hZ2VfdG9wLCBhZXMoZmlsbD1kYW1hZ2VjYXVzZSwgeT1sb3NzLCB4PXllYXIpKSArIAojICAgIGdlb21fYmFyKCBzdGF0PSJpZGVudGl0eSIpICsgdGhlbWVfYncoKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpICsgZ2d0aXRsZSgiQ0hFUlJJRVMgTG9zcyB2cy4geWVhciAtIHRvcCBkYW1hZ2UgY2F1c2VzIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgICsgIHNjYWxlX3hfZGlzY3JldGUobGltaXRzPWMoMjAwMToyMDE1KSkgICsgc2NhbGVfeV9jb250aW51b3VzKGxhYmVsID0gdW5pdF9mb3JtYXQodW5pdCA9ICJNIiwgc2NhbGUgPSAxZS02LCBkaWdpdHMgPSAwKSkKCiNnZ3Bsb3QoQ0hFUlJJRVNfZGFtYWdlX3RvcCwgYWVzKGZpbGw9ZGFtYWdlY2F1c2UsIHk9bG9zcywgeD15ZWFyKSkgKyAKIyAgICBnZW9tX2Jhciggc3RhdD0iaWRlbnRpdHkiKSArIHRoZW1lX2J3KCkgKyBnZ3RpdGxlKCJJUE5XIGNoZXJyaWVzIGxvc3MgdnMuIHllYXIgLSB0b3AgZGFtYWdlIGNhdXNlcyIpICsgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemU9MTYpLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZSA9IDE2KSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT1yZWwoMS41KSwgYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCBmYW1pbHkgPSAiU2VyaWYiKSkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYW1pbHkgPSAiU2VyaWYiKSkgICsgIHNjYWxlX3hfZGlzY3JldGUobGltaXRzPWMoMjAwMToyMDE1KSkgKyB0aGVtZShsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNCkpICsgc2NhbGVfZmlsbF9tYW51YWwoImxlZ2VuZCIsIHZhbHVlcyA9IGMoIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIgPSAicmVkIiwgIkZyb3N0IiA9ICJibHVlIiwgIkZyZWV6ZSIgPSAiZ3JheSIpKSArIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiwgZmFjZSA9ICJib2xkIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE4KSkgKyBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWwgPSB1bml0X2Zvcm1hdCh1bml0ID0gIk0iLCBzY2FsZSA9IDFlLTYsIGRpZ2l0cyA9IDApKQoKcGFyKG1hciA9IGMoNSwgNSwgNCwgMSksIGZhbWlseSA9ICdzZXJpZicpCgpnZ3Bsb3QoQ0hFUlJJRVNfZGFtYWdlX3RvcCwgYWVzKGZpbGw9ZGFtYWdlY2F1c2UsIHk9bG9zcywgeD15ZWFyKSkgKyAKICAgIGdlb21fYmFyKCBzdGF0PSJpZGVudGl0eSIpICsgdGhlbWVfYncoKSArIHRoZW1lKHBhbmVsLmdyaWQubWFqb3I9ZWxlbWVudF9ibGFuaygpLHBhbmVsLmdyaWQubWlub3I9ZWxlbWVudF9ibGFuaygpKSArIGdndGl0bGUoIklQTlcgY2hlcnJpZXMgbG9zcyB2cy4geWVhciAtIHRvcCBkYW1hZ2UgY2F1c2VzIikgKyB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplID0gMTYpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPXJlbCgxLjUpLCBhbmdsZSA9IDkwLCBoanVzdCA9IDEsIGZhbWlseSA9ICJTZXJpZiIpKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9MjgsIGZhbWlseSA9ICJTZXJpZiIpKSAgKyAgc2NhbGVfeF9kaXNjcmV0ZShuYW1lID0gIlllYXJzIiwgbGltaXRzPWMoMjAwMToyMDE1KSkgKyB0aGVtZShsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNCkpICsgc2NhbGVfZmlsbF9tYW51YWwoImxlZ2VuZCIsIHZhbHVlcyA9IGMoIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIgPSAicmVkIiwgIkZyb3N0IiA9ICJibHVlIiwgIkZyZWV6ZSIgPSAiZ3JheSIpKSArIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoZmFtaWx5ID0gIlNlcmlmIiwgc2l6ZT0xNiwgZmFjZSA9ICJib2xkIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTI0LCBmYW1pbHkgPSAiU2VyaWYiLCBmYWNlID0gImJvbGQiKSkgKyBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJJbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsYWJlbCA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiTSIsIHNjYWxlID0gMWUtNiwgZGlnaXRzID0gMCkpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKQoKCmNoZXJyaWVzIDwtIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfY2hlcnJpZXMKI2kgPC0gaW50ZXJhY3Rpb24ucGxvdCh4LmZhY3RvciAgICAgPSBjaGVycmllcyR5ZWFyLAojICAgICAgICAgICAgICAgICB0cmFjZS5mYWN0b3IgPSBjaGVycmllcyRkYW1hZ2VjYXVzZSwgCiMgICAgICAgICAgICAgICAgIHRyYWNlLmxhYmVsID0gImNoZXJyaWVzIiwKIyAgICAgICAgICAgICAgICAgcmVzcG9uc2UgICAgID0gY2hlcnJpZXMkbG9zcywgCiMgICAgICAgICAgICAgICAgIGZ1biA9IHN1bSwKIyAgICAgICAgICAgICAgICAgbGFzID0gMywKIyAgICAgICAgICAgICAgICAgdHlwZT0iYiIsCiMgICAgICAgICAgICAgICAgIGNvbD1jKCJibGFjayIsInJlZCIsImdyZWVuIiksICAjIyMgQ29sb3JzIGZvciBsZXZlbHMgb2YgdHJhY2UgdmFyLgojICAgICAgICAgICAgICAgICBwY2g9YygxOSwgMTcsIDE1LCAxNCwgMTMpLCAgICAgICAgICAgICAjIyMgU3ltYm9scyBmb3IgbGV2ZWxzIG9mIHRyYWNlIHZhci4KIyAgICAgICAgICAgICAgICAgZml4ZWQ9VFJVRSwgICAgICAgICAgICAgICAgICAgICMjIyBPcmRlciBieSBmYWN0b3Igb3JkZXIgaW4gZGF0YQojICAgICAgICAgICAgICAgICBsZWcuYnR5ID0gIm4iLAojICAgICAgICAgICAgICAgICB5bGFiPSIiLAojICAgICAgICAgICAgICAgICB4bGFiPSJZZWFyIiwKIyAgICAgICAgICAgICAgICAgbWFpbj0iSW50ZXJhY3Rpb24gUGxvdCAtIENIRVJSSUVTIExvc3MgdnMuIHllYXIgLSB0b3AgZGFtYWdlIGNhdXNlcyIsIGxhcyA9IDIpCiAgICAgICAgICAgCiNFREEgZm9yIGNoZXJyaWVzCiMtYm94cGxvdHMgb2YgZGF0YSBieSBjdWJlIGxvc3MgYnkgZWFjaCBvZiB0aGUgdGhyZWUgZmFjdG9ycwpwYXIobWFyPWMoMTAsOCw2LDIpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3AgPSBjKDUsIDEsIDApKSAKYm94cGxvdChsb2cxMF9sb3NzIH4geWVhciwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9jaGVycmllcywgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9jaGVycmllcyRsb2cxMGxvc3MpCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfY2hlcnJpZXMkbG9nMTBsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgc2VwID0gIiIpKQoKdGl0bGUobWFpbj0iTG9ncml0aG1pYyB0cmFuc2Zvcm06IElQTlcgY2hlcnJpZXMgaW5zdXJhbmNlIGxvc3NcbmJ5IHllYXIiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IlllYXJzIiwgbGluZT01LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJMb2cxMCBpbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCgpzdHJpcGNoYXJ0KGxvZzEwX2xvc3MgfiB5ZWFyLCBkYXRhID0gcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9jaGVycmllcywgdmVydGljYWwgPSBUUlVFLCAKICAgIG1ldGhvZCA9ICJqaXR0ZXIiLCBhZGQgPSBUUlVFLCBwY2ggPSAyMCwgY29sID0gJ2JsdWUnKQoKcGFyKG1hcj1jKDEyLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgpib3hwbG90KGxvZzEwX2xvc3MgfiBkYW1hZ2VjYXVzZSwgcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9jaGVycmllcywgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9jaGVycmllcyRsb2cxMGxvc3MpCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfY2hlcnJpZXMkbG9nMTBsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgc2VwID0gIiIpKQoKdGl0bGUobWFpbj0iTG9ncml0aG1pYyB0cmFuc2Zvcm06IElQTlcgY2hlcnJpZXMgaW5zdXJhbmNlIGxvc3NcbmJ5IGRhbWFnZSBjYXVzZSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iRGFtYWdlIGNhdXNlIiwgbGluZT0xMCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iTG9nMTAgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKCnN0cmlwY2hhcnQobG9nMTBfbG9zcyB+IGRhbWFnZWNhdXNlLCBkYXRhID0gcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9jaGVycmllcywgdmVydGljYWwgPSBUUlVFLCAKICAgIG1ldGhvZCA9ICJqaXR0ZXIiLCBhZGQgPSBUUlVFLCBwY2ggPSAyMCwgY29sID0gJ2JsdWUnKQoKcGFyKG1hcj1jKDEwLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgpib3hwbG90KGxvZzEwX2xvc3MgfiBjb3VudHksIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfY2hlcnJpZXMsIHlheHQgPSAnbicsIGNvbCA9ICJsaWdodGJsdWUiLCBsYXMgPSAzLCBjZXgubWFpbiA9IDEuNSwgY2V4LmxhYiA9IDEuNCwgY2V4LmF4aXMgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxLCBvdXRsaW5lID0gRkFMU0UpCgpwdHMgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfY2hlcnJpZXMkbG9nMTBsb3NzKQpwdHMyIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2NoZXJyaWVzJGxvZzEwbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsIHNlcCA9ICIiKSkKCnRpdGxlKG1haW49IkxvZ3JpdGhtaWMgdHJhbnNmb3JtOiBJUE5XIGNoZXJyaWVzIGluc3VyYW5jZSBsb3NzXG5ieSBjb3VudHkiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT01LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJMb2cxMCBpbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCgpzdHJpcGNoYXJ0KGxvZzEwX2xvc3MgfiBjb3VudHksIGRhdGEgPSBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2NoZXJyaWVzLCB2ZXJ0aWNhbCA9IFRSVUUsIAogICAgbWV0aG9kID0gImppdHRlciIsIGFkZCA9IFRSVUUsIHBjaCA9IDIwLCBjb2wgPSAnYmx1ZScpCgojLS0tCgpsaWJyYXJ5KGh0bWx0b29scykKICAKICB0YWcubWFwLnRpdGxlIDwtIHRhZ3Mkc3R5bGUoSFRNTCgiCiAgLmxlYWZsZXQtY29udHJvbC5tYXAtdGl0bGUgeyAKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMjAlKTsKICAgIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50OwogICAgbGVmdDogNTAlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZy1sZWZ0OiAxMHB4OyAKICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7IAogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiAxNnB4OwogIH0KIikpCgp0aXRsZSA8LSB0YWdzJGRpdigKICB0YWcubWFwLnRpdGxlLCBIVE1MKCJJUE5XIGNoZXJyaWVzIGluc3VyYW5jZSBsb3NzIGR1ZSB0byBleGNlc3NpdmUgbW9pc3R1cmUsIGZyb3N0LCBhbmQgZnJlZXplXG4gMjAwMSB0byAyMDE1IikKKSAKCgojLUFsbCB5ZWFycwoKIHBhbCA8LSBjb2xvck51bWVyaWMoY29sb3JSYW1wUGFsZXR0ZShjKCJsaWdodHllbGxvdyIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpKSgxMSksIG5hLmNvbG9yID0gIiNmZmZmZmYiLAogICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZXZhbChwYXJzZSh0ZXh0PXBhc3RlKCJjb3VudHlfY2hlcnJpZXNfbW9pc3R1cmVmcm9zdGZyZWV6ZSQiLCAibG9zcyIsIHNlcD0iIikpKSkKCm1hcCA8LSBsZWFmbGV0KGRhdGEgPSBjb3VudHlfY2hlcnJpZXNfbW9pc3R1cmVmcm9zdGZyZWV6ZSwgb3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21Db250cm9sID0gRkFMU0UsIHpvb21TbmFwID0gMC4xKSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JQogIAogIGFkZE1pbmlNYXAoCiAgICB0aWxlcyA9IHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaXRlLAogICAgcG9zaXRpb24gPSAndG9wbGVmdCcsIAogICAgd2lkdGggPSAyMDAsIGhlaWdodCA9IDIwMCwKICAgIHRvZ2dsZURpc3BsYXkgPSBGQUxTRSkgJT4lCiAgCiAgCiAgICNhZGRDb250cm9sKHRpdGxlLCBwb3NpdGlvbiA9ICJ0b3BsZWZ0IiwgY2xhc3NOYW1lPSJtYXAtdGl0bGUiKSAlPiUKICAKICAKICBmaXRCb3VuZHMoZXh0ZVsxXSwgZXh0ZVszXSwgZXh0ZVsyXSwgZXh0ZVs0XSkgJT4lIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5wYWwoY291bnR5X2NoZXJyaWVzX21vaXN0dXJlZnJvc3RmcmVlemUkbG9zcyksICBmaWxsT3BhY2l0eSA9IC44LCB3ZWlnaHQgPSAxLCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIGFkZFBvbHlnb25zKGRhdGEgPSBzdGF0ZXMsIGZpbGxPcGFjaXR5ID0gMCwgd2VpZ2h0ID0gNCwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSAKICAKICAgIGFkZExlZ2VuZChwYWwgPSBwYWwsIHZhbHVlcyA9IG5hLm9taXQofmxvc3MpLCBncm91cCA9ICJjaXJjbGVzIiwgdGl0bGUgPSBwYXN0ZSgiQ2hlcnJpZXMgZXhjZXNzaXZlIG1vaXN0dXJlPGJyPmZyb3N0IGZyZWV6ZTogMjAwMSB0byAyMDE1Iiwgc2VwID0gIiIpLCBuYS5sYWJlbCA9ICIiLCBwb3NpdGlvbiA9ICJ0b3ByaWdodCIsIGxhYkZvcm1hdCA9IGxhYmVsRm9ybWF0KHByZWZpeCA9ICIkIikpICU+JQoKCmFkZExhYmVsT25seU1hcmtlcnMoZGF0YSA9IGNvdW50eV9jaGVycmllc19tb2lzdHVyZWZyb3N0ZnJlZXplLCBsbmcgPSBsYXRfbG9uZ1ssMV0sIGxhdCA9IGxhdF9sb25nWywyXSwgbGFiZWwgPSBsYXBwbHkobGFicywgSFRNTCksIGxhYmVsT3B0aW9ucyA9IGxhYmVsT3B0aW9ucyhzdHlsZSA9IGxpc3QoImZvbnQtZmFtaWx5IiA9ICJzZXJpZiIpLCBub0hpZGUgPSBUUlVFLCBkaXJlY3Rpb24gPSAnbWlkZGxlJywgdGV4dE9ubHkgPSBUUlVFLCB0ZXh0c2l6ZSA9ICIxOHB4IiwgY29sID0gIndoaXRlIiwgIG9mZnNldCA9IGMoMjAsIDApLCBtYXJrZXJPcHRpb25zKHJpc2VPbkhvdmVyID0gVFJVRSkKKSkgCiAgICAgICAgCmFkZFNjYWxlQmFyKG1hcCwgcG9zaXRpb24gPSBjKCJ0b3ByaWdodCIpLCBvcHRpb25zID0gc2NhbGVCYXJPcHRpb25zKCkpCgoKI21hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQogIyBhZGRMZWdlbmQoY29sb3JzID0gfk5BTUUsIGxhYmVscyA9IH5OQU1FLCB2YWx1ZXMgPSB+TkFNRSwgb3BhY2l0eSA9IDAuNSwgdGl0bGUgPSBOVUxMLAogICMgICAgICAgICAgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiKQoKcGFyKG1hcj1jKDEwLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgpiYXJwbG90KENIRVJSSUVTX2RhbWFnZV90b3BfYWdnX21vaXN0dXJlZnJvc3RmcmVlemUkbG9zcywgbmFtZXMuYXJnID0gQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZSROQU1FLCB5YXh0ID0gJ24nLCBjb2wgPSAibGlnaHRibHVlIiwgbGFzID0gMywgY2V4Lm1haW4gPSAxLjUsIGNleC5sYWIgPSAxLjQsIGNleC5heGlzID0gMS40LCBjZXgubmFtZXMgPSAxLjQsIGZvbnQubGFiID0gMSwgZm9udC5heGlzID0gMSwgb3V0bGluZSA9IEZBTFNFKQogIAogIHB0cyA8LSBwcmV0dHkoQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZSRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCgp0aXRsZShtYWluPSJJUE5XIGNoZXJyaWVzIGluc3VyYW5jZSBsb3NzIGR1ZSB0byBcbiBleGNlc3NpdmUgbW9pc3R1cmUsIGZyb3N0LCBhbmQgZnJlZXplOiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT03LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJDaGVycmllcyBpbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTUsIGNleC5sYWIgPSAxLjQpCgogIAogICMtLS0tCiAgCiAgbGlicmFyeShodG1sdG9vbHMpCiAgCiAgdGFnLm1hcC50aXRsZSA8LSB0YWdzJHN0eWxlKEhUTUwoIgogIC5sZWFmbGV0LWNvbnRyb2wubWFwLXRpdGxlIHsgCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDIwJSk7CiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDsKICAgIGxlZnQ6IDUwJTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmctbGVmdDogMTBweDsgCiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OyAKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogMTZweDsKICB9CiIpKQoKdGl0bGUgPC0gdGFncyRkaXYoCiAgdGFnLm1hcC50aXRsZSwgSFRNTCgiSVBOVyBjaGVycmllcyBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gZXhjZXNzaXZlIG1vaXN0dXJlLCBmcm9zdCwgYW5kIGZyZWV6ZVxuIDIwMTMiKQopIAoKIy0tMjAxMwoKIHBhbCA8LSBjb2xvck51bWVyaWMoY29sb3JSYW1wUGFsZXR0ZShjKCJsaWdodHllbGxvdyIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIpKSgxMSksIG5hLmNvbG9yID0gIiNmZmZmZmYiLAogICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gZXZhbChwYXJzZSh0ZXh0PXBhc3RlKCJjb3VudHlfY2hlcnJpZXNfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTMkIiwgImxvc3MiLCBzZXA9IiIpKSkpCgptYXAgPC0gbGVhZmxldChkYXRhID0gY291bnR5X2NoZXJyaWVzX21vaXN0dXJlZnJvc3RmcmVlemUyMDEzLCBvcHRpb25zID0gbGVhZmxldE9wdGlvbnMoem9vbUNvbnRyb2wgPSBGQUxTRSwgem9vbVNuYXAgPSAwLjEpKSAlPiUgIAogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJEh5ZGRhLkJhc2UpICU+JQogICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaW5lcykgJT4lCiAgCiAgYWRkTWluaU1hcCgKICAgIHRpbGVzID0gcHJvdmlkZXJzJFN0YW1lbi5Ub25lckxpdGUsCiAgICBwb3NpdGlvbiA9ICd0b3BsZWZ0JywgCiAgICB3aWR0aCA9IDIwMCwgaGVpZ2h0ID0gMjAwLAogICAgdG9nZ2xlRGlzcGxheSA9IEZBTFNFKSAlPiUKICAKICAKICAgI2FkZENvbnRyb2wodGl0bGUsIHBvc2l0aW9uID0gInRvcGxlZnQiLCBjbGFzc05hbWU9Im1hcC10aXRsZSIpICU+JQogIAogIAogIGZpdEJvdW5kcyhleHRlWzFdLCBleHRlWzNdLCBleHRlWzJdLCBleHRlWzRdKSAlPiUgYWRkUG9seWdvbnMoZmlsbENvbG9yID0gfnBhbChjb3VudHlfY2hlcnJpZXNfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTMkbG9zcyksICBmaWxsT3BhY2l0eSA9IC44LCB3ZWlnaHQgPSAxLCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIGFkZFBvbHlnb25zKGRhdGEgPSBzdGF0ZXMsIGZpbGxPcGFjaXR5ID0gMCwgd2VpZ2h0ID0gNCwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSAKICAKICAgIGFkZExlZ2VuZChwYWwgPSBwYWwsIHZhbHVlcyA9IG5hLm9taXQofmxvc3MpLCBncm91cCA9ICJjaXJjbGVzIiwgdGl0bGUgPSBwYXN0ZSgiQ2hlcnJpZXMgZXhjZXNzaXZlIG1vaXN0dXJlPGJyPmZyb3N0IGZyZWV6ZTogMjAxMyIsIHNlcCA9ICIiKSwgbmEubGFiZWwgPSAiIiwgcG9zaXRpb24gPSAidG9wcmlnaHQiLCBsYWJGb3JtYXQgPSBsYWJlbEZvcm1hdChwcmVmaXggPSAiJCIpKSAlPiUKCgphZGRMYWJlbE9ubHlNYXJrZXJzKGRhdGEgPSBjb3VudHlfY2hlcnJpZXNfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTMsIGxuZyA9IGxhdF9sb25nWywxXSwgbGF0ID0gbGF0X2xvbmdbLDJdLCBsYWJlbCA9IGxhcHBseShsYWJzLCBIVE1MKSwgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKHN0eWxlID0gbGlzdCgiZm9udC1mYW1pbHkiID0gInNlcmlmIiksIG5vSGlkZSA9IFRSVUUsIGRpcmVjdGlvbiA9ICdtaWRkbGUnLCB0ZXh0T25seSA9IFRSVUUsIHRleHRzaXplID0gIjE4cHgiLCBjb2wgPSAid2hpdGUiLCAgb2Zmc2V0ID0gYygyMCwgMCksIG1hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQopKSAKICAgICAgICAKYWRkU2NhbGVCYXIobWFwLCBwb3NpdGlvbiA9IGMoInRvcHJpZ2h0IiksIG9wdGlvbnMgPSBzY2FsZUJhck9wdGlvbnMoKSkKCgoKI21hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQogIyBhZGRMZWdlbmQoY29sb3JzID0gfk5BTUUsIGxhYmVscyA9IH5OQU1FLCB2YWx1ZXMgPSB+TkFNRSwgb3BhY2l0eSA9IDAuNSwgdGl0bGUgPSBOVUxMLAogICMgICAgICAgICAgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiKQoKcGFyKG1hcj1jKDEwLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgogIGJhcnBsb3QoQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTMkbG9zcywgbmFtZXMuYXJnID0gQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTMkTkFNRSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKICAKcHRzIDwtIHByZXR0eShDSEVSUklFU19kYW1hZ2VfdG9wX2FnZ19tb2lzdHVyZWZyb3N0ZnJlZXplMjAxMyRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTMkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCgoKdGl0bGUobWFpbj0iSVBOVyBjaGVycmllcyBpbnN1cmFuY2UgbG9zcyBkdWUgXG50byBleGNlc3NpdmUgbW9pc3R1cmUsIGZyb3N0LCBhbmQgZnJlZXplIDIwMTMiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT03LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJDaGVycmllcyBpbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTUsIGNleC5sYWIgPSAxLjQpCgogIAogIAogICMtLS0KCmxpYnJhcnkoaHRtbHRvb2xzKQogIAogIHRhZy5tYXAudGl0bGUgPC0gdGFncyRzdHlsZShIVE1MKCIKICAubGVhZmxldC1jb250cm9sLm1hcC10aXRsZSB7IAogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwyMCUpOwogICAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiA1MCU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7IAogICAgcGFkZGluZy1yaWdodDogMTBweDsgCiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNzUpOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDE2cHg7CiAgfQoiKSkKCnRpdGxlIDwtIHRhZ3MkZGl2KAogIHRhZy5tYXAudGl0bGUsIEhUTUwoIklQTlcgY2hlcnJpZXMgaW5zdXJhbmNlIGxvc3MgZHVlIHRvIGV4Y2Vzc2l2ZSBtb2lzdHVyZSwgZnJvc3QsIGFuZCBmcmVlemVcbiAyMDE1IikKKSAKICAKIy0tMjAxNQoKcGFsIDwtIGNvbG9yTnVtZXJpYyhjb2xvclJhbXBQYWxldHRlKGMoImxpZ2h0eWVsbG93IiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIikpKDExKSwgbmEuY29sb3IgPSAiI2ZmZmZmZiIsCiAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSBldmFsKHBhcnNlKHRleHQ9cGFzdGUoImNvdW50eV9jaGVycmllc19tb2lzdHVyZWZyb3N0ZnJlZXplMjAxNSQiLCAibG9zcyIsIHNlcD0iIikpKSkKCm1hcCA8LSBsZWFmbGV0KGRhdGEgPSBjb3VudHlfY2hlcnJpZXNfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTUsIG9wdGlvbnMgPSBsZWFmbGV0T3B0aW9ucyh6b29tQ29udHJvbCA9IEZBTFNFLCB6b29tU25hcCA9IDAuMSkpICU+JSAgCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkSHlkZGEuQmFzZSkgJT4lCiAgIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJFN0YW1lbi5Ub25lckxpbmVzKSAlPiUKICAKICBhZGRNaW5pTWFwKAogICAgdGlsZXMgPSBwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGl0ZSwKICAgIHBvc2l0aW9uID0gJ3RvcGxlZnQnLCAKICAgIHdpZHRoID0gMjAwLCBoZWlnaHQgPSAyMDAsCiAgICB0b2dnbGVEaXNwbGF5ID0gRkFMU0UpICU+JQogIAogIAogICAjYWRkQ29udHJvbCh0aXRsZSwgcG9zaXRpb24gPSAidG9wbGVmdCIsIGNsYXNzTmFtZT0ibWFwLXRpdGxlIikgJT4lCiAgCiAgCiAgZml0Qm91bmRzKGV4dGVbMV0sIGV4dGVbM10sIGV4dGVbMl0sIGV4dGVbNF0pICU+JSBhZGRQb2x5Z29ucyhmaWxsQ29sb3IgPSB+cGFsKGNvdW50eV9jaGVycmllc19tb2lzdHVyZWZyb3N0ZnJlZXplMjAxNSRsb3NzKSwgIGZpbGxPcGFjaXR5ID0gLjgsIHdlaWdodCA9IDEsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgYWRkUG9seWdvbnMoZGF0YSA9IHN0YXRlcywgZmlsbE9wYWNpdHkgPSAwLCB3ZWlnaHQgPSA0LCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIAogIAogICAgYWRkTGVnZW5kKHBhbCA9IHBhbCwgdmFsdWVzID0gbmEub21pdCh+bG9zcyksIGdyb3VwID0gImNpcmNsZXMiLCB0aXRsZSA9IHBhc3RlKCJDaGVycmllcyBleGNlc3NpdmUgbW9pc3R1cmU8YnI+ZnJvc3QgZnJlZXplOiAyMDE1Iiwgc2VwID0gIiIpLCBuYS5sYWJlbCA9ICIiLCBwb3NpdGlvbiA9ICJ0b3ByaWdodCIsIGxhYkZvcm1hdCA9IGxhYmVsRm9ybWF0KHByZWZpeCA9ICIkIikpICU+JQoKCmFkZExhYmVsT25seU1hcmtlcnMoZGF0YSA9IGNvdW50eV9jaGVycmllc19tb2lzdHVyZWZyb3N0ZnJlZXplMjAxNSwgbG5nID0gbGF0X2xvbmdbLDFdLCBsYXQgPSBsYXRfbG9uZ1ssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMsIEhUTUwpLCBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoc3R5bGUgPSBsaXN0KCJmb250LWZhbWlseSIgPSAic2VyaWYiKSwgbm9IaWRlID0gVFJVRSwgZGlyZWN0aW9uID0gJ21pZGRsZScsIHRleHRPbmx5ID0gVFJVRSwgdGV4dHNpemUgPSAiMThweCIsIGNvbCA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCikpIAogICAgICAgIAphZGRTY2FsZUJhcihtYXAsIHBvc2l0aW9uID0gYygidG9wcmlnaHQiKSwgb3B0aW9ucyA9IHNjYWxlQmFyT3B0aW9ucygpKQoKCgojbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCiAjIGFkZExlZ2VuZChjb2xvcnMgPSB+TkFNRSwgbGFiZWxzID0gfk5BTUUsIHZhbHVlcyA9IH5OQU1FLCBvcGFjaXR5ID0gMC41LCB0aXRsZSA9IE5VTEwsCiAgIyAgICAgICAgICBwb3NpdGlvbiA9ICJib3R0b21yaWdodCIpCgpwYXIobWFyPWMoMTAsOCw2LDIpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3AgPSBjKDUsIDEsIDApKSAKCmJhcnBsb3QoQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTUkbG9zcywgbmFtZXMuYXJnID0gQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTUkTkFNRSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKICAKcHRzIDwtIHByZXR0eShDSEVSUklFU19kYW1hZ2VfdG9wX2FnZ19tb2lzdHVyZWZyb3N0ZnJlZXplMjAxNSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkoQ0hFUlJJRVNfZGFtYWdlX3RvcF9hZ2dfbW9pc3R1cmVmcm9zdGZyZWV6ZTIwMTUkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCgoKdGl0bGUobWFpbj0iSVBOVyBjaGVycmllcyBpbnN1cmFuY2UgbG9zcyBkdWUgXG50byBleGNlc3NpdmUgbW9pc3R1cmUsIGZyb3N0LCBhbmQgZnJlZXplIDIwMTUiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkNvdW50aWVzIiwgbGluZT03LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJDaGVycmllcyBpbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTUsIGNleC5sYWIgPSAxLjQpCmBgYAoKPGJyPjwvYnI+CgohW10oaHR0cHM6Ly9kbWluZS5pby93YWYvaW1nL1N0ZXAxLnBuZykKCjxicj48L2JyPgo8ZGl2IGFsaWduPSJsZWZ0Ij4KCiMjIFNURVAgMTI6IERSWSBQRUFTLCAyMDAxLTIwMTUgZm9yIHRoZSBJUE5XCgo8ZGl2IGFsaWduPSJjZW50ZXIiPgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXJyb3I9VFJVRSwgZWNobz1GQUxTRSwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA3fQoKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ3JpZEV4dHJhKQoKI3BpZSBjaGFydCBmb3IgMjAwNy0yMDE1CgpvcHRpb25zKHNjaXBlbj05OTkpCgphZGROb0Fuc3dlciA8LSBmdW5jdGlvbih4KXsKICBpZihpcy5mYWN0b3IoeCkpIHJldHVybihmYWN0b3IoeCwgbGV2ZWxzPWMobGV2ZWxzKHgpLCAiTm8gQW5zd2VyIikpKQogIHJldHVybih4KQp9CgpEUllQRUFTIDwtIHN1YnNldChwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlLCBjb21tb2RpdHkgPT0gIkRSWSBQRUFTIikKCnBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUgPC0gYWdncmVnYXRlKERSWVBFQVMkbG9zcywgbGlzdChEUllQRUFTJGRhbWFnZWNhdXNlKSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc18xOTg5XzIwMTUpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQoKcGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGUgPC0gcGFsb3VzZV9zdW1sb3NzXzE5ODlfMjAxNVtvcmRlcihwYWxvdXNlX3N1bWxvc3NfMTk4OV8yMDE1JGxvc3MpLF0gClggPC0gcGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGVbb3JkZXIocGFsb3VzZV9zdW1sb3NzXzIwMDdfMjAxNV9hZ2dyZWdhdGUkbG9zcyksXSAKI2NvbG5hbWVzKFgpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQpzdW1tYXJ5X2RhdGFzZXQgPC0gWCAlPiUgZmlsdGVyKGxvc3MgPCA2MDAwMDApIApzdW1tYXJ5X2RhdGFzZXQyIDwtIFggJT4lIGZpbHRlcihsb3NzID4gNjAwMDAwKSAKY29sbmFtZXMoc3VtbWFyeV9kYXRhc2V0KSA8LSBjKCJkYW1hZ2VjYXVzZSIsICJsb3NzIikKWSA8LSBzdW0oc3VtbWFyeV9kYXRhc2V0JGxvc3MpCllZIDwtIGMoIk90aGVyIiwgWSkKWVkgPC0gZGF0YS5mcmFtZSh0KFlZKSkKY29sbmFtZXMoWVkpIDwtIGMoImRhbWFnZWNhdXNlIiwgImxvc3MiKQpZWVkgPC0gcmJpbmQoc3VtbWFyeV9kYXRhc2V0MiwgWVkpCiNmYWN0b3IoWVlZKQoKWVlZIDwtIGFzLmRhdGEuZnJhbWUobGFwcGx5KFlZWSwgYWRkTm9BbnN3ZXIpKQpZWVkkbG9zcyA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihZWVkkbG9zcykpCllZWTE8LSBZWVlbb3JkZXIoWVlZJGxvc3MpLF0gCllZWTEgPC0gWVlZMVsgbnJvdyhZWVkxKToxLCBdCgpwIDwtIHBsb3RfbHkoWVlZLCBsYWJlbHMgPSB+ZGFtYWdlY2F1c2UsIHZhbHVlcyA9IH5sb3NzLCB0eXBlID0gJ3BpZScsCiAgICAgICAgICAgICB0ZXh0cG9zaXRpb24gPSAnaW5zaWRlJywKICAgICAgICAgICAgIHRleHRpbmZvID0gJ2xhYmVsK3BlcmNlbnQnLAogICAgICAgICAgICAgaW5zaWRldGV4dGZvbnQgPSBsaXN0KGNvbG9yID0gJyNGRkZGRkYnKSwKICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywKICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJyQnLCBsb3NzLCAnIGJpbGxpb25zJyksCiAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KGNvbG9ycyA9IGNvbG9ycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpc3QoY29sb3IgPSAnI0ZGRkZGRicsIHdpZHRoID0gMSkpLAogICAgICAgICAgICAgI1RoZSAncHVsbCcgYXR0cmlidXRlIGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIHNwYWNlIGJldHdlZW4gdGhlIHNlY3RvcnMKICAgICAgICAgICAgIHNob3dsZWdlbmQgPSBUUlVFKSAlPiUKICBsYXlvdXQodGl0bGUgPSAnVG9wIERhbWFnZSBDYXVzZXMgZm9yIERSWSBQRUFTLCBQYWxvdXNlIFJlZ2lvbjogMjAwMS0yMDE1JywKICAgICAgICAgeGF4aXMgPSBsaXN0KHNob3dncmlkID0gRkFMU0UsIHplcm9saW5lID0gRkFMU0UsIHNob3d0aWNrbGFiZWxzID0gRkFMU0UpLAogICAgICAgICB5YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwgemVyb2xpbmUgPSBGQUxTRSwgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSkpCgoKCiMtLWludGVyYWN0aW9uIHBsb3QgbG9zcyB2cyB5ZWFyIGZvciBhbGwgZGFtYWdlIGNhdXNlcywgYWxsIFBhbG91c2UgY291bnRpZXMKCgojcAoKWVlZMiA8LSBZWVkxCmxldmVscyhZWVkyJGRhbWFnZWNhdXNlKVs4XSA8LSAiRXhjZXNzaXZlIE1vaXN0dXJlIgpZWVkyJGxvc3MgPC0gcm91bmQoWVlZMiRsb3NzLCBkaWdpdHMgPSAwKQpZWVkyJGxvc3MgPC0gZm9ybWF0KFlZWTIkbG9zcyxiaWcubWFyaz0iLCIsc2NpZW50aWZpYz1GQUxTRSkKWVlZMiRsb3NzIDwtIHBhc3RlKCIkIiwgWVlZMiRsb3NzLCBzZXA9IiIpCllZWTIkbG9zcyA8LSBnc3ViKCIgIiwgIiIsIFlZWTIkbG9zcywgZml4ZWQgPSBUUlVFKQoKIy0teWVhcgpwYWxvdXNlX3N1bWxvc3NfeWVhciA8LSBhZ2dyZWdhdGUoRFJZUEVBUyRsb3NzLCBsaXN0KERSWVBFQVMkeWVhciksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhwYWxvdXNlX3N1bWxvc3NfeWVhcikgPC0gYygieWVhciIsICJsb3NzIikKCiMtLWNvdW50eQoKcGFsb3VzZV9zdW1sb3NzX2NvdW50eSA8LSBhZ2dyZWdhdGUoRFJZUEVBUyRsb3NzLCBsaXN0KERSWVBFQVMkY291bnR5KSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKHBhbG91c2Vfc3VtbG9zc19jb3VudHkpIDwtIGMoImNvdW50eSIsICJsb3NzIikKCnBhcihtYXI9YygxMi41LCA2LjEsIDQsIDIuMSksIGZhbWlseSA9ICdzZXJpZicsIG1ncD1jKDQsIDEsIDApLCBsYXM9MCkKYmFycGxvdChwYWxvdXNlX3N1bWxvc3NfY291bnR5JGxvc3MsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc19jb3VudHkkY291bnR5LCBjZXgubmFtZXMgPSAxLjQsIGxhcyA9IDMsIHlheHQ9Im4iLCAgY29sID0gImxpZ2h0Ymx1ZSIpCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2NvdW50eSRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2NvdW50eSRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCgojbXRleHQodGV4dCA9ICJEYW1hZ2UgQ2F1c2UiLAojICAgICAgc2lkZSA9IDEsI3NpZGUgMSA9IGJvdHRvbQojICAgICAgbGluZSA9IDgpCgp0aXRsZShtYWluPSJJUE5XIGRyeSBwZWFzIGluc3VyYW5jZSBsb3NzIGJ5IGNvbW1vZGl0eTogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJDb3VudGllcyIsIGxpbmU9OCwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iSW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKcGFyKG1hcj1jKDEyLjUsIDYuMSwgNCwgMi4xKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwPWMoNCwgMSwgMCksIGxhcz0wKQpiYXJwbG90KHBhbG91c2Vfc3VtbG9zc195ZWFyJGxvc3MsIG5hbWVzLmFyZyA9IHBhbG91c2Vfc3VtbG9zc195ZWFyJHllYXIsIGNleC5uYW1lcyA9IDEuNCwgbGFzID0gMywgeWF4dD0ibiIsICBjb2wgPSAibGlnaHRibHVlIikKcHRzIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfeWVhciRsb3NzIC8gMTAwMDAwMCkKcHRzMiA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX3llYXIkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKI210ZXh0KHRleHQgPSAiWWVhcnMiLAojICAgICAgc2lkZSA9IDEsI3NpZGUgMSA9IGJvdHRvbQojICAgICAgbGluZSA9IDgpCgp0aXRsZShtYWluPSJJUE5XIGRyeSBwZWFzIGluc3VyYW5jZSBsb3NzIGJ5IHllYXI6IDIwMDEgdG8gMjAxNSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iWWVhcnMiLCBsaW5lPTgsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9Ikluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCnBhcihtYXI9YygxMi44LCA2LjEsIDYsIDIuMSksIGZhbWlseSA9ICJzZXJpZiIsIG1ncD1jKDQsIDEsIDApLCBsYXM9MCkKbGV2ZWxzKFlZWTEkZGFtYWdlY2F1c2UpWzhdIDwtICJFeGNlc3NpdmUgTW9pc3R1cmUiCgpiYXJwbG90KFlZWTEkbG9zcywgbmFtZXMuYXJnID0gWVlZMSRkYW1hZ2VjYXVzZSwgbGFzID0gMywgY2V4Lm5hbWVzID0gMS40LCB5YXh0PSJuIiwgY29sID0gImxpZ2h0Ymx1ZSIpCnB0cyA8LSBwcmV0dHkoWVlZJGxvc3MgLyAxMDAwMDAwKQpwdHMyIDwtIHByZXR0eShZWVkkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCgoKdGl0bGUobWFpbj0iIElQTlcgZHJ5IHBlYXMgaW5zdXJhbmNlIGxvc3MgYnkgZGFtYWdlIGNhdXNlOiAyMDAxIHRvIDIwMTUiLCBsaW5lID0gMiwgYWRqID0gMCwgY2V4Lm1haW4gPSAxLjkpCnRpdGxlKHhsYWI9IkRhbWFnZSBDYXVzZSIsIGxpbmU9MTEuNSwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iRHJ5IHBlYXMgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT01LCBjZXgubGFiID0gMS40KQoKI210ZXh0KHRleHQgPSAiRGFtYWdlIENhdXNlIiwKIyAgICAgIHNpZGUgPSAxLCNzaWRlIDEgPSBib3R0b20KIyAgICAgIGxpbmUgPSAxMCkKCmh0bWxUYWJsZShZWVkyLAogICAgICAgICAgY2dyb3VwID0gYygiMjAwMS0yMDE1IiksCiAgICAgICAgIGNhcHRpb24gPSAiSVBOVyByZWdpb24gRFJZIFBFQVMgdG90YWwgaW5zdXJhbmNlIGxvc3MgYnkgZGFtYWdlIGNhdXNlLCAyMDAxLTIwMTUiLAogICAgICAgICAgYWxpZ24gPSAiYyIsCiAgICAgICAgICBybmFtZXMgPSBGQUxTRSwKICAgICAgICAgIGNzcy5jZWxsID0gInBhZGRpbmctbGVmdDogLjVlbTsgcGFkZGluZy1yaWdodDogLjVlbTsiKQpgYGAKCgo8ZGl2IGFsaWduPSJjZW50ZXIiPgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZXJyb3I9VFJVRSwgZWNobz1GQUxTRSwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA3fQoKCkRSWVBFQVMgPC0gc3Vic2V0KHN1bWxvc3NfcGFsb3VzZV9zdW0sIGNvbW1vZGl0eSA9PSAiRFJZIFBFQVMiKQoKCgpsZXZlbHMoRFJZUEVBUyRkYW1hZ2VjYXVzZSlbOF0gPC0gIkV4Y2Vzc2l2ZSBNb2lzdHVyZSIKRFJZUEVBUyRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IoRFJZUEVBUyRkYW1hZ2VjYXVzZSkKCkRSWVBFQVNfZGFtYWdlIDwtIHN1YnNldChEUllQRUFTLCBkYW1hZ2VjYXVzZSA9PSAiRHJvdWdodCIgfCBkYW1hZ2VjYXVzZSA9PSAiSGVhdCIgfCBkYW1hZ2VjYXVzZSA9PSAiRXhjZXNzaXZlIE1vaXN0dXJlIiB8IGRhbWFnZWNhdXNlID09ICJIYWlsIiB8IGRhbWFnZWNhdXNlID09ICJDb2xkIFdldCBXZWF0aGVyIiB8IGRhbWFnZWNhdXNlID09ICJEZWNsaW5lIGluIFByaWNlIiB8IGRhbWFnZWNhdXNlID09ICJGcm9zdCIgfCBkYW1hZ2VjYXVzZSA9PSAiV2luZC9FeGNlc3MgV2luZCIpCkRSWVBFQVNfZGFtYWdlJGRhbWFnZWNhdXNlIDwtIGZhY3RvcihEUllQRUFTX2RhbWFnZSRkYW1hZ2VjYXVzZSkKCgpEUllQRUFTX2RhbWFnZV90b3AgPC0gc3Vic2V0KERSWVBFQVNfZGFtYWdlLCBkYW1hZ2VjYXVzZSA9PSAiRXhjZXNzaXZlIE1vaXN0dXJlIiB8IGRhbWFnZWNhdXNlID09ICJEcm91Z2h0IiAgfCBkYW1hZ2VjYXVzZSA9PSAiSGVhdCIpCgoKRFJZUEVBU19kYW1hZ2VfZHJvdWdodGhlYXQyMDAxXzIwMTUgPC0gc3Vic2V0KERSWVBFQVNfZGFtYWdlLCBkYW1hZ2VjYXVzZSA9PSAiRHJvdWdodCIgIHwgZGFtYWdlY2F1c2UgPT0gIkhlYXQiKQpEUllQRUFTX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0MjAwMV8yMDE1IDwtIGFnZ3JlZ2F0ZShEUllQRUFTX2RhbWFnZV9kcm91Z2h0aGVhdDIwMDFfMjAxNSRsb3NzLCBieSA9IGxpc3QoRFJZUEVBU19kYW1hZ2VfZHJvdWdodGhlYXQyMDAxXzIwMTUkY291bnR5KSwgRlVOID0gInN1bSIpCmNvbG5hbWVzKERSWVBFQVNfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDAxXzIwMTUpIDwtIGMoIk5BTUUiLCAibG9zcyIpCgpjb3VudHlfZHJ5cGVhc19kcm91Z2h0aGVhdDIwMDFfMjAxNSA8LSBtZXJnZShjb3VudGllcywgRFJZUEVBU19kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMDFfMjAxNSwgYnkgPSAiTkFNRSIpCgoKI2dncGxvdChEUllQRUFTX2RhbWFnZV90b3AsIGFlcyhmaWxsPWRhbWFnZWNhdXNlLCB5PWxvc3MsIHg9eWVhcikpICsgCiMgICAgZ2VvbV9iYXIoIHN0YXQ9ImlkZW50aXR5IikgKyB0aGVtZV9idygpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSkgKyBnZ3RpdGxlKCJEUlkgUEVBUyBMb3NzIHZzLiB5ZWFyIC0gdG9wIGRhbWFnZSBjYXVzZXMiKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cz1jKDIwMDE6MjAxNSkpICsgc2NhbGVfeV9jb250aW51b3VzKGxhYmVsID0gdW5pdF9mb3JtYXQodW5pdCA9ICJNIiwgc2NhbGUgPSAxZS02LCBkaWdpdHMgPSAwKSkKCkRSWVBFQVNfZGFtYWdlX3RvcCRkYW1hZ2VjYXVzZSA8LSBmYWN0b3IoRFJZUEVBU19kYW1hZ2VfdG9wJGRhbWFnZWNhdXNlLCBsZXZlbHMgPSBjKCJFeGNlc3NpdmUgTW9pc3R1cmUiLCAiSGVhdCIsICJEcm91Z2h0IikpCgoKCkRSWVBFQVNfZGFtYWdlX2Ryb3VnaHRoZWF0MjAxNSA8LSBzdWJzZXQoRFJZUEVBU19kYW1hZ2UsIGRhbWFnZWNhdXNlID09ICJEcm91Z2h0IiAgfCBkYW1hZ2VjYXVzZSA9PSAiSGVhdCIpCkRSWVBFQVNfZGFtYWdlX2Ryb3VnaHRoZWF0MjAxNSA8LSBzdWJzZXQoRFJZUEVBU19kYW1hZ2VfZHJvdWdodGhlYXQyMDE1LCB5ZWFyID09IDIwMTUpCgoKRFJZUEVBU19kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTUgPC0gYWdncmVnYXRlKERSWVBFQVNfZGFtYWdlX2Ryb3VnaHRoZWF0MjAxNSRsb3NzLCBieSA9IGxpc3QoRFJZUEVBU19kYW1hZ2VfZHJvdWdodGhlYXQyMDE1JGNvdW50eSksIEZVTiA9ICJzdW0iKQpjb2xuYW1lcyhEUllQRUFTX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0MjAxNSkgPC0gYygiTkFNRSIsICJsb3NzIikKCmNvdW50eV9kcnlwZWFzX2Ryb3VnaHRoZWF0MjAxNSA8LSBtZXJnZShjb3VudGllcywgRFJZUEVBU19kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTUsIGJ5ID0gIk5BTUUiKQoKCgpEUllQRUFTX2RhbWFnZV9leGNlc3NpdmVtb2lzdHVyZTIwMTEgPC0gc3Vic2V0KERSWVBFQVNfZGFtYWdlLCBkYW1hZ2VjYXVzZSA9PSAiRXhjZXNzaXZlIE1vaXN0dXJlIikKRFJZUEVBU19kYW1hZ2VfZXhjZXNzaXZlbW9pc3R1cmUyMDExIDwtIHN1YnNldChEUllQRUFTX2RhbWFnZV9leGNlc3NpdmVtb2lzdHVyZTIwMTEsIHllYXIgPT0gMjAxMSkKCkRSWVBFQVNfZGFtYWdlX3RvcF9hZ2dfZXhjZXNzaXZlbW9pc3R1cmUyMDExIDwtIGFnZ3JlZ2F0ZShEUllQRUFTX2RhbWFnZV9leGNlc3NpdmVtb2lzdHVyZTIwMTEkbG9zcywgYnkgPSBsaXN0KERSWVBFQVNfZGFtYWdlX2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSRjb3VudHkpLCBGVU4gPSAic3VtIikKY29sbmFtZXMoRFJZUEVBU19kYW1hZ2VfdG9wX2FnZ19leGNlc3NpdmVtb2lzdHVyZTIwMTEpIDwtIGMoIk5BTUUiLCAibG9zcyIpCgpjb3VudHlfZHJ5cGVhc19leGNlc3NpdmVtb2lzdHVyZTIwMTEgPC0gbWVyZ2UoY291bnRpZXMsIERSWVBFQVNfZGFtYWdlX3RvcF9hZ2dfZXhjZXNzaXZlbW9pc3R1cmUyMDExLCBieSA9ICJOQU1FIikKCgoKcGFyKG1hciA9IGMoNSwgNSwgNCwgMSksIGZhbWlseSA9ICdzZXJpZicpCgpnZ3Bsb3QoRFJZUEVBU19kYW1hZ2VfdG9wLCBhZXMoZmlsbD1kYW1hZ2VjYXVzZSwgeT1sb3NzLCB4PXllYXIpKSArIAogICAgZ2VvbV9iYXIoIHN0YXQ9ImlkZW50aXR5IikgKyB0aGVtZV9idygpICsgdGhlbWUocGFuZWwuZ3JpZC5tYWpvcj1lbGVtZW50X2JsYW5rKCkscGFuZWwuZ3JpZC5taW5vcj1lbGVtZW50X2JsYW5rKCkpICsgZ2d0aXRsZSgiSVBOVyBkcnkgcGVhcyBsb3NzIHZzLiB5ZWFyIC0gdG9wIGRhbWFnZSBjYXVzZXMiKSArIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2KSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJTZXJpZiIsIHNpemUgPSAxNiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9cmVsKDEuNSksIGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgZmFtaWx5ID0gIlNlcmlmIikpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0yOCwgZmFtaWx5ID0gIlNlcmlmIikpICArICBzY2FsZV94X2Rpc2NyZXRlKG5hbWUgPSAiWWVhcnMiLCBsaW1pdHM9YygyMDAxOjIwMTUpKSArIHRoZW1lKGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE0KSkgKyBzY2FsZV9maWxsX21hbnVhbCgibGVnZW5kIiwgdmFsdWVzID0gYygiRXhjZXNzaXZlIE1vaXN0dXJlIiA9ICJncmF5IiwgIkhlYXQiID0gImJsdWUiLCAiRHJvdWdodCIgPSAicmVkIikpICsgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChmYW1pbHkgPSAiU2VyaWYiLCBzaXplPTE2LCBmYWNlID0gImJvbGQiKSkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MjQsIGZhbWlseSA9ICJTZXJpZiIsIGZhY2UgPSAiYm9sZCIpKSArIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIkluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxhYmVsID0gdW5pdF9mb3JtYXQodW5pdCA9ICJNIiwgc2NhbGUgPSAxZS02LCBkaWdpdHMgPSAwKSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpCgpkcnlwZWFzIDwtIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfZHJ5cGVhcwojaSA8LSBpbnRlcmFjdGlvbi5wbG90KHguZmFjdG9yICAgICA9IGRyeXBlYXMkeWVhciwKIyAgICAgICAgICAgICAgICAgdHJhY2UuZmFjdG9yID0gZHJ5cGVhcyRkYW1hZ2VjYXVzZSwgCiMgICAgICAgICAgICAgICAgIHRyYWNlLmxhYmVsID0gImRyeSBwZWFzIiwKIyAgICAgICAgICAgICAgICAgcmVzcG9uc2UgICAgID0gZHJ5cGVhcyRsb3NzLCAKIyAgICAgICAgICAgICAgICAgZnVuID0gc3VtLAojICAgICAgICAgICAgICAgICBsYXMgPSAzLAojICAgICAgICAgICAgICAgICB0eXBlPSJiIiwKIyAgICAgICAgICAgICAgICAgY29sPWMoImJsYWNrIiwicmVkIiwiZ3JlZW4iKSwgICMjIyBDb2xvcnMgZm9yIGxldmVscyBvZiB0cmFjZSB2YXIuCiMgICAgICAgICAgICAgICAgIHBjaD1jKDE5LCAxNywgMTUsIDE0LCAxMyksICAgICAgICAgICAgICMjIyBTeW1ib2xzIGZvciBsZXZlbHMgb2YgdHJhY2UgdmFyLgojICAgICAgICAgICAgICAgICBmaXhlZD1UUlVFLCAgICAgICAgICAgICAgICAgICAgIyMjIE9yZGVyIGJ5IGZhY3RvciBvcmRlciBpbiBkYXRhCiMgICAgICAgICAgICAgICAgIGxlZy5idHkgPSAibiIsCiMgICAgICAgICAgICAgICAgIHlsYWI9IiIsCiMgICAgICAgICAgICAgICAgIHhsYWI9IlllYXIiLAojICAgICAgICAgICAgICAgICBtYWluPSJJbnRlcmFjdGlvbiBQbG90IC0gRFJZIFBFQVMgTG9zcyB2cy4geWVhciAtIHRvcCBkYW1hZ2UgY2F1c2VzIiwgbGFzID0gMikKCiNFREEgZm9yIGRyeSBwZWFzCiMtYm94cGxvdHMgb2YgZGF0YSBieSBjdWJlIGxvc3MgYnkgZWFjaCBvZiB0aGUgdGhyZWUgZmFjdG9ycwpwYXIobWFyPWMoMTAsOCw2LDIpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3AgPSBjKDUsIDEsIDApKSAKCmJveHBsb3QobG9nMTBfbG9zcyB+IHllYXIsIHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfZHJ5cGVhcywgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9kcnlwZWFzJGxvZzEwX2xvc3MpCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfZHJ5cGVhcyRsb2cxMF9sb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgc2VwID0gIiIpKQoKdGl0bGUobWFpbj0iTG9ncml0aG1pYyB0cmFuc2Zvcm06IElQTlcgZHJ5IHBlYXMgaW5zdXJhbmNlIGxvc3NcbmJ5IHllYXIiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IlllYXJzIiwgbGluZT01LCBjZXgubGFiID0gMS40KQp0aXRsZSh5bGFiPSJMb2cxMCBpbnN1cmFuY2UgY2xhaW0gbG9zcyAoJCkiLCBsaW5lPTQsIGNleC5sYWIgPSAxLjQpCgpzdHJpcGNoYXJ0KGxvZzEwX2xvc3MgfiB5ZWFyLCBkYXRhID0gcGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9kcnlwZWFzLCB2ZXJ0aWNhbCA9IFRSVUUsIAogICAgbWV0aG9kID0gImppdHRlciIsIGFkZCA9IFRSVUUsIHBjaCA9IDIwLCBjb2wgPSAnYmx1ZScpCgpwYXIobWFyPWMoMTIsOCw2LDIpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3AgPSBjKDUsIDEsIDApKSAKCmJveHBsb3QobG9nMTBfbG9zcyB+IGRhbWFnZWNhdXNlLCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2RyeXBlYXMsIHlheHQgPSAnbicsIGNvbCA9ICJsaWdodGJsdWUiLCBsYXMgPSAzLCBjZXgubWFpbiA9IDEuNSwgY2V4LmxhYiA9IDEuNCwgY2V4LmF4aXMgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxLCBvdXRsaW5lID0gRkFMU0UpCgpwdHMgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfZHJ5cGVhcyRsb2cxMF9sb3NzKQpwdHMyIDwtIHByZXR0eShwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2RyeXBlYXMkbG9nMTBfbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGNleC5heGlzID0gMS40LCBsYWJlbHMgPSBwYXN0ZShwdHMsIHNlcCA9ICIiKSkKCnRpdGxlKG1haW49IkxvZ3JpdGhtaWMgdHJhbnNmb3JtOiBJUE5XIGRyeSBwZWFzIGluc3VyYW5jZSBsb3NzXG5ieSBkYW1hZ2UgY2F1c2UiLCBsaW5lID0gMiwgY2V4Lm1haW4gPSAxLjksIGFkaiA9IDApCnRpdGxlKHhsYWI9IkRhbWFnZSBjYXVzZSIsIGxpbmU9OSwgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iTG9nMTAgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT00LCBjZXgubGFiID0gMS40KQoKc3RyaXBjaGFydChsb2cxMF9sb3NzIH4gZGFtYWdlY2F1c2UsIGRhdGEgPSBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2RyeXBlYXMsIHZlcnRpY2FsID0gVFJVRSwgCiAgICBtZXRob2QgPSAiaml0dGVyIiwgYWRkID0gVFJVRSwgcGNoID0gMjAsIGNvbCA9ICdibHVlJykKCnBhcihtYXI9YygxMiw4LDYsMiksIGZhbWlseSA9ICdzZXJpZicsIG1ncCA9IGMoNSwgMSwgMCkpIAoKYm94cGxvdChsb2cxMF9sb3NzIH4gY291bnR5LCBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2RyeXBlYXMseWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKCnB0cyA8LSBwcmV0dHkocGFsb3VzZV9zdW1sb3NzX2FnZ3JlZ2F0ZV9kcnlwZWFzJGxvZzEwX2xvc3MpCnB0czIgPC0gcHJldHR5KHBhbG91c2Vfc3VtbG9zc19hZ2dyZWdhdGVfZHJ5cGVhcyRsb2cxMF9sb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgY2V4LmF4aXMgPSAxLjQsIGxhYmVscyA9IHBhc3RlKHB0cywgc2VwID0gIiIpKQoKdGl0bGUobWFpbj0iTG9ncml0aG1pYyB0cmFuc2Zvcm06IElQTlcgZHJ5IHBlYXMgaW5zdXJhbmNlIGxvc3NcbmJ5IGRhbWFnZSBjYXVzZSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iQ291bnRpZXMiLCBsaW5lPTcsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IkxvZzEwIGluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NCwgY2V4LmxhYiA9IDEuNCkKCgpzdHJpcGNoYXJ0KGxvZzEwX2xvc3MgfiBjb3VudHksIGRhdGEgPSBwYWxvdXNlX3N1bWxvc3NfYWdncmVnYXRlX2RyeXBlYXMsIHZlcnRpY2FsID0gVFJVRSwgCiAgICBtZXRob2QgPSAiaml0dGVyIiwgYWRkID0gVFJVRSwgcGNoID0gMjAsIGNvbCA9ICdibHVlJykKCiMtLS0KCmxpYnJhcnkoaHRtbHRvb2xzKQogIAogIHRhZy5tYXAudGl0bGUgPC0gdGFncyRzdHlsZShIVE1MKCIKICAubGVhZmxldC1jb250cm9sLm1hcC10aXRsZSB7IAogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwyMCUpOwogICAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiA1MCU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7IAogICAgcGFkZGluZy1yaWdodDogMTBweDsgCiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNzUpOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDE2cHg7CiAgfQoiKSkKCnRpdGxlIDwtIHRhZ3MkZGl2KAogIHRhZy5tYXAudGl0bGUsIEhUTUwoIklQTlcgZHJ5IHBlYXMgaW5zdXJhbmNlIGxvc3MgZHVlIHRvIGRyb3VnaHQgYW5kIGhlYXRcbiAyMDAxIHRvIDIwMTUiKQopIAoKCiMtQWxsIHllYXJzCgogcGFsIDwtIGNvbG9yTnVtZXJpYyhjb2xvclJhbXBQYWxldHRlKGMoImxpZ2h0eWVsbG93IiwgInllbGxvdyIsICJvcmFuZ2UiLCAicmVkIikpKDExKSwgbmEuY29sb3IgPSAiI2ZmZmZmZiIsCiAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSBldmFsKHBhcnNlKHRleHQ9cGFzdGUoImNvdW50eV9kcnlwZWFzX2Ryb3VnaHRoZWF0MjAwMV8yMDE1JCIsICJsb3NzIiwgc2VwPSIiKSkpKQoKbWFwIDwtIGxlYWZsZXQoZGF0YSA9IGNvdW50eV9kcnlwZWFzX2Ryb3VnaHRoZWF0MjAwMV8yMDE1LCBvcHRpb25zID0gbGVhZmxldE9wdGlvbnMoem9vbUNvbnRyb2wgPSBGQUxTRSwgem9vbVNuYXAgPSAwLjEpKSAlPiUgIAogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJEh5ZGRhLkJhc2UpICU+JQogICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaW5lcykgJT4lCiAgCiAgYWRkTWluaU1hcCgKICAgIHRpbGVzID0gcHJvdmlkZXJzJFN0YW1lbi5Ub25lckxpdGUsCiAgICBwb3NpdGlvbiA9ICd0b3BsZWZ0JywgCiAgICB3aWR0aCA9IDIwMCwgaGVpZ2h0ID0gMjAwLAogICAgdG9nZ2xlRGlzcGxheSA9IEZBTFNFKSAlPiUKICAKICAKICAgI2FkZENvbnRyb2wodGl0bGUsIHBvc2l0aW9uID0gInRvcGxlZnQiLCBjbGFzc05hbWU9Im1hcC10aXRsZSIpICU+JQogIAogIAogIGZpdEJvdW5kcyhleHRlWzFdLCBleHRlWzNdLCBleHRlWzJdLCBleHRlWzRdKSAlPiUgYWRkUG9seWdvbnMoZmlsbENvbG9yID0gfnBhbChjb3VudHlfZHJ5cGVhc19kcm91Z2h0aGVhdDIwMDFfMjAxNSRsb3NzKSwgIGZpbGxPcGFjaXR5ID0gLjgsIHdlaWdodCA9IDEsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgYWRkUG9seWdvbnMoZGF0YSA9IHN0YXRlcywgZmlsbE9wYWNpdHkgPSAwLCB3ZWlnaHQgPSA0LCBzdHJva2UgPSBUUlVFLCBzbW9vdGhGYWN0b3IgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgJT4lIAogIAogICAgYWRkTGVnZW5kKHBhbCA9IHBhbCwgdmFsdWVzID0gbmEub21pdCh+bG9zcyksIGdyb3VwID0gImNpcmNsZXMiLCB0aXRsZSA9IHBhc3RlKCJEcnkgcGVhcyBkcm91Z2h0PGJyPmhlYXQ6IDIwMDEgdG8gMjAxNSIsIHNlcCA9ICIiKSwgbmEubGFiZWwgPSAiIiwgcG9zaXRpb24gPSAidG9wcmlnaHQiLCBsYWJGb3JtYXQgPSBsYWJlbEZvcm1hdChwcmVmaXggPSAiJCIpKSAlPiUKCgphZGRMYWJlbE9ubHlNYXJrZXJzKGRhdGEgPSBjb3VudHlfZHJ5cGVhc19kcm91Z2h0aGVhdDIwMDFfMjAxNSwgbG5nID0gbGF0X2xvbmdbLDFdLCBsYXQgPSBsYXRfbG9uZ1ssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMsIEhUTUwpLCBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoc3R5bGUgPSBsaXN0KCJmb250LWZhbWlseSIgPSAic2VyaWYiKSwgbm9IaWRlID0gVFJVRSwgZGlyZWN0aW9uID0gJ21pZGRsZScsIHRleHRPbmx5ID0gVFJVRSwgdGV4dHNpemUgPSAiMThweCIsIGNvbCA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCikpIAogICAgICAgIAphZGRTY2FsZUJhcihtYXAsIHBvc2l0aW9uID0gYygidG9wcmlnaHQiKSwgb3B0aW9ucyA9IHNjYWxlQmFyT3B0aW9ucygpKQoKCiNtYXJrZXJPcHRpb25zKHJpc2VPbkhvdmVyID0gVFJVRSkKICMgYWRkTGVnZW5kKGNvbG9ycyA9IH5OQU1FLCBsYWJlbHMgPSB+TkFNRSwgdmFsdWVzID0gfk5BTUUsIG9wYWNpdHkgPSAwLjUsIHRpdGxlID0gTlVMTCwKICAjICAgICAgICAgIHBvc2l0aW9uID0gImJvdHRvbXJpZ2h0IikKCnBhcihtYXI9YygxMCw4LDYsMiksIGZhbWlseSA9ICdzZXJpZicsIG1ncCA9IGMoNSwgMSwgMCkpIAoKYmFycGxvdChEUllQRUFTX2RhbWFnZV90b3BfYWdnX2Ryb3VnaHRoZWF0MjAwMV8yMDE1JGxvc3MsIG5hbWVzLmFyZyA9IERSWVBFQVNfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDAxXzIwMTUkTkFNRSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKICAKICBwdHMgPC0gcHJldHR5KERSWVBFQVNfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDAxXzIwMTUkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KERSWVBFQVNfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDAxXzIwMTUkbG9zcykKYXhpcygyLCBsYXMgPSAxLCBhdCA9IHB0czIsIGxhYmVscyA9IHBhc3RlKHB0cywgIk0iLCBzZXAgPSAiIikpCgoKdGl0bGUobWFpbj0iSVBOVyBkcnkgcGVhcyBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gXG4gZHJvdWdodCBhbmQgaGVhdDogMjAwMSB0byAyMDE1IiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJDb3VudGllcyIsIGxpbmU9NywgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iRHJ5IHBlYXMgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT01LCBjZXgubGFiID0gMS40KQoKICAKICAjLS0tLQogIAogIGxpYnJhcnkoaHRtbHRvb2xzKQogIAogIHRhZy5tYXAudGl0bGUgPC0gdGFncyRzdHlsZShIVE1MKCIKICAubGVhZmxldC1jb250cm9sLm1hcC10aXRsZSB7IAogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwyMCUpOwogICAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiA1MCU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7IAogICAgcGFkZGluZy1yaWdodDogMTBweDsgCiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNzUpOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDE2cHg7CiAgfQoiKSkKCnRpdGxlIDwtIHRhZ3MkZGl2KAogIHRhZy5tYXAudGl0bGUsIEhUTUwoIklQTlcgY2hlcnJpZXMgaW5zdXJhbmNlIGxvc3MgZHVlIHRvIGV4Y2Vzc2l2ZSBtb2lzdHVyZSwgZnJvc3QsIGFuZCBmcmVlemVcbiAyMDEzIikKKSAKCiMtLTIwMTEKCiBwYWwgPC0gY29sb3JOdW1lcmljKGNvbG9yUmFtcFBhbGV0dGUoYygibGlnaHR5ZWxsb3ciLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSkoMTEpLCBuYS5jb2xvciA9ICIjZmZmZmZmIiwKICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9IGV2YWwocGFyc2UodGV4dD1wYXN0ZSgiY291bnR5X2RyeXBlYXNfZXhjZXNzaXZlbW9pc3R1cmUyMDExJCIsICJsb3NzIiwgc2VwPSIiKSkpKQoKbWFwIDwtIGxlYWZsZXQoZGF0YSA9IGNvdW50eV9kcnlwZWFzX2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSwgb3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21Db250cm9sID0gRkFMU0UsIHpvb21TbmFwID0gMC4xKSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JQogIAogIGFkZE1pbmlNYXAoCiAgICB0aWxlcyA9IHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaXRlLAogICAgcG9zaXRpb24gPSAndG9wbGVmdCcsIAogICAgd2lkdGggPSAyMDAsIGhlaWdodCA9IDIwMCwKICAgIHRvZ2dsZURpc3BsYXkgPSBGQUxTRSkgJT4lCiAgCiAgCiAgICNhZGRDb250cm9sKHRpdGxlLCBwb3NpdGlvbiA9ICJ0b3BsZWZ0IiwgY2xhc3NOYW1lPSJtYXAtdGl0bGUiKSAlPiUKICAKICAKICBmaXRCb3VuZHMoZXh0ZVsxXSwgZXh0ZVszXSwgZXh0ZVsyXSwgZXh0ZVs0XSkgJT4lIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5wYWwoY291bnR5X2RyeXBlYXNfZXhjZXNzaXZlbW9pc3R1cmUyMDExJGxvc3MpLCAgZmlsbE9wYWNpdHkgPSAuOCwgd2VpZ2h0ID0gMSwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSBhZGRQb2x5Z29ucyhkYXRhID0gc3RhdGVzLCBmaWxsT3BhY2l0eSA9IDAsIHdlaWdodCA9IDQsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgCiAgCiAgICBhZGRMZWdlbmQocGFsID0gcGFsLCB2YWx1ZXMgPSBuYS5vbWl0KH5sb3NzKSwgZ3JvdXAgPSAiY2lyY2xlcyIsIHRpdGxlID0gcGFzdGUoIkRyeSBwZWFzIGV4Y2Vzc2l2ZTxicj5tb2lzdHVyZSAyMDExIiwgc2VwID0gIiIpLCBuYS5sYWJlbCA9ICIiLCBwb3NpdGlvbiA9ICJ0b3ByaWdodCIsIGxhYkZvcm1hdCA9IGxhYmVsRm9ybWF0KHByZWZpeCA9ICIkIikpICU+JQoKCmFkZExhYmVsT25seU1hcmtlcnMoZGF0YSA9IGNvdW50eV9kcnlwZWFzX2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSwgbG5nID0gbGF0X2xvbmdbLDFdLCBsYXQgPSBsYXRfbG9uZ1ssMl0sIGxhYmVsID0gbGFwcGx5KGxhYnMsIEhUTUwpLCBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoc3R5bGUgPSBsaXN0KCJmb250LWZhbWlseSIgPSAic2VyaWYiKSwgbm9IaWRlID0gVFJVRSwgZGlyZWN0aW9uID0gJ21pZGRsZScsIHRleHRPbmx5ID0gVFJVRSwgdGV4dHNpemUgPSAiMThweCIsIGNvbCA9ICJ3aGl0ZSIsICBvZmZzZXQgPSBjKDIwLCAwKSwgbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCikpIAogICAgICAgIAphZGRTY2FsZUJhcihtYXAsIHBvc2l0aW9uID0gYygidG9wcmlnaHQiKSwgb3B0aW9ucyA9IHNjYWxlQmFyT3B0aW9ucygpKQoKCgojbWFya2VyT3B0aW9ucyhyaXNlT25Ib3ZlciA9IFRSVUUpCiAjIGFkZExlZ2VuZChjb2xvcnMgPSB+TkFNRSwgbGFiZWxzID0gfk5BTUUsIHZhbHVlcyA9IH5OQU1FLCBvcGFjaXR5ID0gMC41LCB0aXRsZSA9IE5VTEwsCiAgIyAgICAgICAgICBwb3NpdGlvbiA9ICJib3R0b21yaWdodCIpCgpwYXIobWFyPWMoMTAsOCw2LDIpLCBmYW1pbHkgPSAnc2VyaWYnLCBtZ3AgPSBjKDUsIDEsIDApKSAKCiAgYmFycGxvdChEUllQRUFTX2RhbWFnZV9leGNlc3NpdmVtb2lzdHVyZTIwMTEkbG9zcywgbmFtZXMuYXJnID0gRFJZUEVBU19kYW1hZ2VfZXhjZXNzaXZlbW9pc3R1cmUyMDExJGNvdW50eSwgeWF4dCA9ICduJywgY29sID0gImxpZ2h0Ymx1ZSIsIGxhcyA9IDMsIGNleC5tYWluID0gMS41LCBjZXgubGFiID0gMS40LCBjZXguYXhpcyA9IDEuNCwgY2V4Lm5hbWVzID0gMS40LCBmb250LmxhYiA9IDEsIGZvbnQuYXhpcyA9IDEsIG91dGxpbmUgPSBGQUxTRSkKICAKcHRzIDwtIHByZXR0eShEUllQRUFTX2RhbWFnZV9leGNlc3NpdmVtb2lzdHVyZTIwMTEkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KERSWVBFQVNfZGFtYWdlX2V4Y2Vzc2l2ZW1vaXN0dXJlMjAxMSRsb3NzKQpheGlzKDIsIGxhcyA9IDEsIGF0ID0gcHRzMiwgbGFiZWxzID0gcGFzdGUocHRzLCAiTSIsIHNlcCA9ICIiKSkKCgp0aXRsZShtYWluPSJJUE5XIGRyeSBwZWFzIGluc3VyYW5jZSBsb3NzIGR1ZSBcbnRvIGV4Y2Vzc2l2ZSBtb2lzdHVyZTogMjAxMSIsIGxpbmUgPSAyLCBjZXgubWFpbiA9IDEuOSwgYWRqID0gMCkKdGl0bGUoeGxhYj0iQ291bnRpZXMiLCBsaW5lPTcsIGNleC5sYWIgPSAxLjQpCnRpdGxlKHlsYWI9IkRyeSBwZWFzIGluc3VyYW5jZSBjbGFpbSBsb3NzICgkKSIsIGxpbmU9NSwgY2V4LmxhYiA9IDEuNCkKCiAgCiAgCiAgIy0tLQoKbGlicmFyeShodG1sdG9vbHMpCiAgCiAgdGFnLm1hcC50aXRsZSA8LSB0YWdzJHN0eWxlKEhUTUwoIgogIC5sZWFmbGV0LWNvbnRyb2wubWFwLXRpdGxlIHsgCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDIwJSk7CiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDsKICAgIGxlZnQ6IDUwJTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmctbGVmdDogMTBweDsgCiAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OyAKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogMTZweDsKICB9CiIpKQoKdGl0bGUgPC0gdGFncyRkaXYoCiAgdGFnLm1hcC50aXRsZSwgSFRNTCgiSVBOVyBkcnkgcGVhcyBpbnN1cmFuY2UgbG9zcyBkdWUgdG8gZHJvdWdodCBhbmQgaGVhdFxuIDIwMTUiKQopIAogIAojLS0yMDE1CgpwYWwgPC0gY29sb3JOdW1lcmljKGNvbG9yUmFtcFBhbGV0dGUoYygibGlnaHR5ZWxsb3ciLCAieWVsbG93IiwgIm9yYW5nZSIsICJyZWQiKSkoMTEpLCBuYS5jb2xvciA9ICIjZmZmZmZmIiwKICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9IGV2YWwocGFyc2UodGV4dD1wYXN0ZSgiY291bnR5X2RyeXBlYXNfZHJvdWdodGhlYXQyMDE1JCIsICJsb3NzIiwgc2VwPSIiKSkpKQoKbWFwIDwtIGxlYWZsZXQoZGF0YSA9IGNvdW50eV9kcnlwZWFzX2Ryb3VnaHRoZWF0MjAxNSwgb3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKHpvb21Db250cm9sID0gRkFMU0UsIHpvb21TbmFwID0gMC4xKSkgJT4lICAKICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRIeWRkYS5CYXNlKSAlPiUKICAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkU3RhbWVuLlRvbmVyTGluZXMpICU+JQogIAogIGFkZE1pbmlNYXAoCiAgICB0aWxlcyA9IHByb3ZpZGVycyRTdGFtZW4uVG9uZXJMaXRlLAogICAgcG9zaXRpb24gPSAndG9wbGVmdCcsIAogICAgd2lkdGggPSAyMDAsIGhlaWdodCA9IDIwMCwKICAgIHRvZ2dsZURpc3BsYXkgPSBGQUxTRSkgJT4lCiAgCiAgCiAgICNhZGRDb250cm9sKHRpdGxlLCBwb3NpdGlvbiA9ICJ0b3BsZWZ0IiwgY2xhc3NOYW1lPSJtYXAtdGl0bGUiKSAlPiUKICAKICAKICBmaXRCb3VuZHMoZXh0ZVsxXSwgZXh0ZVszXSwgZXh0ZVsyXSwgZXh0ZVs0XSkgJT4lIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5wYWwoY291bnR5X2RyeXBlYXNfZHJvdWdodGhlYXQyMDE1JGxvc3MpLCAgZmlsbE9wYWNpdHkgPSAuOCwgd2VpZ2h0ID0gMSwgc3Ryb2tlID0gVFJVRSwgc21vb3RoRmFjdG9yID0gMC41LCBjb2xvciA9ICJibGFjayIpICU+JSBhZGRQb2x5Z29ucyhkYXRhID0gc3RhdGVzLCBmaWxsT3BhY2l0eSA9IDAsIHdlaWdodCA9IDQsIHN0cm9rZSA9IFRSVUUsIHNtb290aEZhY3RvciA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSAlPiUgCiAgCiAgICBhZGRMZWdlbmQocGFsID0gcGFsLCB2YWx1ZXMgPSBuYS5vbWl0KH5sb3NzKSwgZ3JvdXAgPSAiY2lyY2xlcyIsIHRpdGxlID0gcGFzdGUoIkRyeSBwZWFzIGRyb3VnaHQ8YnI+aGVhdDogMjAxNSIsIHNlcCA9ICIiKSwgbmEubGFiZWwgPSAiIiwgcG9zaXRpb24gPSAidG9wcmlnaHQiLCBsYWJGb3JtYXQgPSBsYWJlbEZvcm1hdChwcmVmaXggPSAiJCIpKSAlPiUKCgphZGRMYWJlbE9ubHlNYXJrZXJzKGRhdGEgPSBjb3VudHlfZHJ5cGVhc19kcm91Z2h0aGVhdDIwMTUsIGxuZyA9IGxhdF9sb25nWywxXSwgbGF0ID0gbGF0X2xvbmdbLDJdLCBsYWJlbCA9IGxhcHBseShsYWJzLCBIVE1MKSwgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKHN0eWxlID0gbGlzdCgiZm9udC1mYW1pbHkiID0gInNlcmlmIiksIG5vSGlkZSA9IFRSVUUsIGRpcmVjdGlvbiA9ICdtaWRkbGUnLCB0ZXh0T25seSA9IFRSVUUsIHRleHRzaXplID0gIjE4cHgiLCBjb2wgPSAid2hpdGUiLCAgb2Zmc2V0ID0gYygyMCwgMCksIG1hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQopKSAKICAgICAgICAKYWRkU2NhbGVCYXIobWFwLCBwb3NpdGlvbiA9IGMoInRvcHJpZ2h0IiksIG9wdGlvbnMgPSBzY2FsZUJhck9wdGlvbnMoKSkKCgoKI21hcmtlck9wdGlvbnMocmlzZU9uSG92ZXIgPSBUUlVFKQogIyBhZGRMZWdlbmQoY29sb3JzID0gfk5BTUUsIGxhYmVscyA9IH5OQU1FLCB2YWx1ZXMgPSB+TkFNRSwgb3BhY2l0eSA9IDAuNSwgdGl0bGUgPSBOVUxMLAogICMgICAgICAgICAgcG9zaXRpb24gPSAiYm90dG9tcmlnaHQiKQoKcGFyKG1hcj1jKDEwLDgsNiwyKSwgZmFtaWx5ID0gJ3NlcmlmJywgbWdwID0gYyg1LCAxLCAwKSkgCgpiYXJwbG90KERSWVBFQVNfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDE1JGxvc3MsIG5hbWVzLmFyZyA9IERSWVBFQVNfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDE1JE5BTUUsIHlheHQgPSAnbicsIGNvbCA9ICJsaWdodGJsdWUiLCBsYXMgPSAzLCBjZXgubWFpbiA9IDEuNSwgY2V4LmxhYiA9IDEuNCwgY2V4LmF4aXMgPSAxLjQsIGNleC5uYW1lcyA9IDEuNCwgZm9udC5sYWIgPSAxLCBmb250LmF4aXMgPSAxLCBvdXRsaW5lID0gRkFMU0UpCiAgCnB0cyA8LSBwcmV0dHkoRFJZUEVBU19kYW1hZ2VfdG9wX2FnZ19kcm91Z2h0aGVhdDIwMTUkbG9zcyAvIDEwMDAwMDApCnB0czIgPC0gcHJldHR5KERSWVBFQVNfZGFtYWdlX3RvcF9hZ2dfZHJvdWdodGhlYXQyMDE1JGxvc3MpCmF4aXMoMiwgbGFzID0gMSwgYXQgPSBwdHMyLCBsYWJlbHMgPSBwYXN0ZShwdHMsICJNIiwgc2VwID0gIiIpKQoKCnRpdGxlKG1haW49IklQTlcgZHJ5IHBlYXMgaW5zdXJhbmNlIGxvc3MgZHVlIFxudG8gZHJvdWdodCBhbmQgaGVhdCAyMDE1IiwgbGluZSA9IDIsIGNleC5tYWluID0gMS45LCBhZGogPSAwKQp0aXRsZSh4bGFiPSJDb3VudGllcyIsIGxpbmU9NywgY2V4LmxhYiA9IDEuNCkKdGl0bGUoeWxhYj0iRHJ5IHBlYXMgaW5zdXJhbmNlIGNsYWltIGxvc3MgKCQpIiwgbGluZT01LCBjZXgubGFiID0gMS40KQoKCiAgICAgICAgICAgCmBgYAoKCg==